weaver-work-cli 0.1.32 → 0.1.36

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.
Files changed (211) hide show
  1. package/README.md +2 -2
  2. package/dist/chunks/{archive-UMGX72K6.js → archive-XBVH7JU7.js} +2 -2
  3. package/dist/chunks/{archive-oa-N2IYBLF3.js → archive-oa-MZM3EKFQ.js} +2 -2
  4. package/dist/chunks/{asset-GLEGKFG5.js → asset-4XO7UOUW.js} +2 -2
  5. package/dist/chunks/{attachment-content-AQNX5N3S.js → attachment-content-VXSWANAC.js} +3 -2
  6. package/dist/chunks/{blog-E44OTVDA.js → blog-PGZKOPSC.js} +2 -2
  7. package/dist/chunks/{caizhilian-DQUFZXZL.js → caizhilian-BH4ZVGUN.js} +2 -2
  8. package/dist/chunks/{calendar-JKPIRKFD.js → calendar-MXEMTIO4.js} +2 -2
  9. package/dist/chunks/{chunk-QWY6PGL6.js → chunk-2LV74IWP.js} +361 -56
  10. package/dist/chunks/chunk-3SO6QL6U.js +73 -0
  11. package/dist/chunks/chunk-5DQEEGCC.js +229 -0
  12. package/dist/chunks/{chunk-G3QJULO2.js → chunk-6LLJFKJE.js} +1 -1
  13. package/dist/chunks/{chunk-C6R3B2ML.js → chunk-BPE37FPB.js} +35 -7
  14. package/dist/chunks/chunk-BYATLLEF.js +68 -0
  15. package/dist/chunks/chunk-BYBSCN4X.js +932 -0
  16. package/dist/chunks/{chunk-CVZ2JOSW.js → chunk-F746NKNF.js} +1 -1
  17. package/dist/chunks/{chunk-GCG2NMWR.js → chunk-HXJQI5NM.js} +4 -2
  18. package/dist/chunks/{chunk-YRVDW4WN.js → chunk-I6QGIBDM.js} +2 -2
  19. package/dist/chunks/{chunk-H7J4DC5R.js → chunk-JCSN3JGM.js} +2 -2
  20. package/dist/chunks/{chunk-2GA5ZIQL.js → chunk-JNG42JKG.js} +30 -1
  21. package/dist/chunks/{chunk-DW6AUUKS.js → chunk-JUXVYKII.js} +9 -4
  22. package/dist/chunks/{chunk-6RKD4DRZ.js → chunk-JYKABYCV.js} +2 -2
  23. package/dist/chunks/{chunk-6EFWDL7Y.js → chunk-NCOVUAZK.js} +2 -2
  24. package/dist/chunks/{chunk-E4Z23GHM.js → chunk-QHFANTX7.js} +1114 -904
  25. package/dist/chunks/{ebuilder-form-V5FG2EHC.js → chunk-QYGO5EE2.js} +22 -1148
  26. package/dist/chunks/{chunk-IURUFGZK.js → chunk-T72N74ZT.js} +50 -33
  27. package/dist/chunks/{chunk-H6XSTSLM.js → chunk-TC6MZAO3.js} +137 -204
  28. package/dist/chunks/{chunk-WKI2FBIQ.js → chunk-VPUTVEMC.js} +737 -341
  29. package/dist/chunks/{chunk-WSKBSQ2U.js → chunk-VPXOPQJI.js} +2 -2
  30. package/dist/chunks/chunk-WXFPWCXG.js +774 -0
  31. package/dist/chunks/{chunk-4YC43QQ4.js → chunk-XMGSYD6S.js} +4 -4
  32. package/dist/chunks/conflict-JAB2LJEZ.js +21 -0
  33. package/dist/chunks/continuation-RN6PZN2M.js +11 -0
  34. package/dist/chunks/contract-XI2EEIZU.js +9110 -0
  35. package/dist/chunks/cowork-SCPGLBA4.js +2527 -0
  36. package/dist/chunks/ebuilder-form-EYLHNOTA.js +121 -0
  37. package/dist/chunks/{ehr-HMFY6VIL.js → ehr-EAP77IMT.js} +1344 -27
  38. package/dist/chunks/{esb-ZYSVB7SG.js → esb-2TGGXEE7.js} +4 -4
  39. package/dist/chunks/{fna-B7RKPAZD.js → fna-2X7ZE7BU.js} +13 -8
  40. package/dist/chunks/{host-OCH2BCCV.js → host-C6EL2RKL.js} +3 -3
  41. package/dist/chunks/{host-45WED2KK.js → host-I4NRK4MX.js} +3 -3
  42. package/dist/chunks/{host-I4Z6BFYX.js → host-Q4LZGCRU.js} +3 -3
  43. package/dist/chunks/host-UEI5FGDM.js +23 -0
  44. package/dist/chunks/{host-KNZ52LJZ.js → host-XCLDDXKQ.js} +3 -3
  45. package/dist/chunks/{hrm-2KAZGUHI.js → hrm-YXERJM76.js} +3 -3
  46. package/dist/chunks/{im-ACJJWH4U.js → im-A4VZN2TQ.js} +88 -12
  47. package/dist/chunks/{invoice-ZK3WCX2U.js → invoice-2Z6YPMIS.js} +3 -3
  48. package/dist/chunks/{jiuchuanhui-5PQD3IL2.js → jiuchuanhui-AR5GMKZB.js} +2 -2
  49. package/dist/chunks/{lazy-dispatch-JQXBW3GM.js → lazy-dispatch-QXW7P4X3.js} +4 -4
  50. package/dist/chunks/{mail-S2HDDXO2.js → mail-7GZ6CPBJ.js} +45 -24
  51. package/dist/chunks/{meeting-QVN3I37L.js → meeting-3NMGA3MB.js} +278 -43
  52. package/dist/chunks/{okr-QNG4VC2Q.js → okr-BZ6XUOAG.js} +2 -2
  53. package/dist/chunks/operations-5QL3AECO.js +11 -0
  54. package/dist/chunks/{plan-A25EMW6U.js → plan-DR5CMUYP.js} +2 -2
  55. package/dist/chunks/{project-G6XV66DZ.js → project-6J63MK33.js} +2 -2
  56. package/dist/chunks/{registry-DC6KR3NH.js → registry-KDD7DHNK.js} +4 -4
  57. package/dist/chunks/{registry-2VLUAESA.js → registry-OZSMDVPP.js} +2 -2
  58. package/dist/chunks/{registry-7C5UMIPL.js → registry-TKX2E7C7.js} +2 -2
  59. package/dist/chunks/{registry-TI3CIUXF.js → registry-VRTNC6UR.js} +8 -6
  60. package/dist/chunks/{room-recommend-WRTHO6Y2.js → room-recommend-XCWRMB5P.js} +4 -3
  61. package/dist/chunks/{schedule-KFIITGSK.js → schedule-IVBICP32.js} +4 -3
  62. package/dist/chunks/{workflow-DJ7SYWAF.js → workflow-D74NFK3C.js} +179 -6
  63. package/dist/index.js +35 -25
  64. package/dist/internal/e10/auth-recovery.js +14 -4
  65. package/dist/internal/e10/fetch-timing.js +31 -0
  66. package/dist/internal/e10/request-runtime.js +5 -0
  67. package/dist/shortcuts/contract/host.js +34 -59
  68. package/dist/shortcuts/cowork/continuation.js +70 -0
  69. package/dist/shortcuts/cowork/errors.js +59 -0
  70. package/dist/shortcuts/cowork/host.js +180 -0
  71. package/dist/shortcuts/cowork/index.js +166 -0
  72. package/dist/shortcuts/cowork/manifest.js +65 -0
  73. package/dist/shortcuts/cowork/operations/discuss-write.js +277 -0
  74. package/dist/shortcuts/cowork/operations/item-write.js +380 -0
  75. package/dist/shortcuts/cowork/operations/member-write.js +283 -0
  76. package/dist/shortcuts/cowork/operations/permission-write.js +286 -0
  77. package/dist/shortcuts/cowork/operations/read.js +423 -0
  78. package/dist/shortcuts/cowork/operations/registry.js +39 -0
  79. package/dist/shortcuts/cowork/operations/review-write.js +157 -0
  80. package/dist/shortcuts/cowork/operations/shared.js +215 -0
  81. package/dist/shortcuts/cowork/operations/types.js +39 -0
  82. package/dist/shortcuts/cowork/operations.js +19 -0
  83. package/dist/shortcuts/ehr/host.js +4 -1
  84. package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +757 -0
  85. package/dist/shortcuts/ehr/operations/recruit-position.js +367 -0
  86. package/dist/shortcuts/ehr/operations/recruit-stats.js +133 -0
  87. package/dist/shortcuts/ehr/operations/recruit-write.js +43 -16
  88. package/dist/shortcuts/ehr/operations/recruit.js +182 -10
  89. package/dist/shortcuts/ehr/operations/registry.js +6 -0
  90. package/dist/shortcuts/fna/operations/expense-chart.js +19 -7
  91. package/dist/shortcuts/im/diagnostics.js +97 -0
  92. package/dist/shortcuts/im/host.js +58 -31
  93. package/dist/shortcuts/im/index.js +7 -2
  94. package/dist/shortcuts/im/operations/at-mention.js +127 -0
  95. package/dist/shortcuts/im/operations/file-user.js +10 -2
  96. package/dist/shortcuts/im/operations/group-read.js +26 -5
  97. package/dist/shortcuts/im/operations/group-write.js +35 -28
  98. package/dist/shortcuts/im/operations/msg-sync.js +7 -2
  99. package/dist/shortcuts/im/operations/msg-write.js +76 -10
  100. package/dist/shortcuts/im/operations/quote-mention.js +119 -0
  101. package/dist/shortcuts/im/operations/session.js +1 -1
  102. package/dist/shortcuts/im/operations/shared.js +10 -0
  103. package/dist/shortcuts/im/operations/types.js +13 -0
  104. package/dist/shortcuts/index.js +10 -0
  105. package/dist/shortcuts/mail/host.js +12 -1
  106. package/dist/shortcuts/mail/operations/types.js +17 -2
  107. package/dist/shortcuts/meeting/host.js +27 -34
  108. package/dist/shortcuts/meeting/index.js +79 -1
  109. package/dist/shortcuts/meeting/manifest.js +10 -0
  110. package/dist/shortcuts/meeting/operations/create.js +4 -1
  111. package/dist/shortcuts/meeting/operations/eb/catalog.js +10 -0
  112. package/dist/shortcuts/meeting/operations/eb/conflict.js +84 -8
  113. package/dist/shortcuts/meeting/operations/eb/create-flow.js +1195 -140
  114. package/dist/shortcuts/meeting/operations/eb/factory.js +170 -8
  115. package/dist/shortcuts/meeting/operations/eb/index.js +16 -3
  116. package/dist/shortcuts/meeting/operations/eb/room-recommend.js +50 -5
  117. package/dist/shortcuts/meeting/operations/eb-fallback.js +163 -0
  118. package/dist/shortcuts/meeting/operations/env.js +99 -46
  119. package/dist/shortcuts/meeting/operations/form-fields.js +110 -0
  120. package/dist/shortcuts/meeting/operations/invitation.js +79 -20
  121. package/dist/shortcuts/meeting/operations/registry.js +2 -0
  122. package/dist/shortcuts/meeting/operations/standard-guard.js +71 -0
  123. package/dist/shortcuts/meeting/operations.js +16 -0
  124. package/dist/shortcuts/workflow/endpoints.js +8 -3
  125. package/dist/shortcuts/workflow/index.js +110 -1
  126. package/dist/shortcuts/workflow/operations/form.js +204 -36
  127. package/dist/shortcuts/workflow/operations/read.js +104 -23
  128. package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupRules.js +448 -0
  129. package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupStore.js +106 -0
  130. package/dist/shortcuts/workflow/operations/todoSmartConvert/businessRules.js +47 -0
  131. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +30 -23
  132. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +1 -0
  133. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +1 -0
  134. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +2 -1
  135. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +2 -4
  136. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +138 -181
  137. package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +12 -7
  138. package/dist/shortcuts/workflow/operations.js +23 -1
  139. package/docs/e10-auth.md +1 -1
  140. package/docs/ehr.md +1 -1
  141. package/docs/fna.md +2 -1
  142. package/docs/im.md +8 -1
  143. package/docs/todo-smart-convert/README.md +1 -1
  144. package/docs/todo-smart-convert/data-contract.md +2 -2
  145. package/docs/todo-smart-convert/subgroup-rules.md +6 -0
  146. package/package.json +1 -1
  147. package/skill-template/business-info.json +18 -0
  148. package/skill-template/domains/cowork.md +14 -0
  149. package/skill-template/domains/yimiaoban.md +3 -3
  150. package/skill-template/skill-template.md +1 -1
  151. package/skills/weaver-e10-blog/SKILL.md +5 -5
  152. package/skills/weaver-e10-caizhilian/SKILL.md +5 -5
  153. package/skills/weaver-e10-calendar/SKILL.md +5 -5
  154. package/skills/weaver-e10-cowork/SKILL.md +101 -0
  155. package/skills/weaver-e10-cowork/references/cowork-read.md +90 -0
  156. package/skills/weaver-e10-cowork/references/cowork-write.md +131 -0
  157. package/skills/weaver-e10-cowork/references/safety-boundaries.md +45 -0
  158. package/skills/weaver-e10-esb/SKILL.md +5 -5
  159. package/skills/weaver-e10-hrm/SKILL.md +5 -5
  160. package/skills/weaver-e10-jinchengda/SKILL.md +2 -2
  161. package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -5
  162. package/skills/weaver-e10-jucailin/SKILL.md +38 -14
  163. package/skills/weaver-e10-jucailin/references/recruit-create.md +104 -0
  164. package/skills/weaver-e10-jucailin/references/recruit-read.md +25 -0
  165. package/skills/weaver-e10-jucailin/references/recruit-write.md +13 -0
  166. package/skills/weaver-e10-jucailin/references/salary.md +15 -11
  167. package/skills/weaver-e10-mail/SKILL.md +17 -14
  168. package/skills/weaver-e10-meeting/SKILL.md +442 -46
  169. package/skills/weaver-e10-meeting/references/meeting-eb.md +135 -3
  170. package/skills/weaver-e10-meeting/references/meeting-invitation.md +28 -2
  171. package/skills/weaver-e10-meeting/references/meeting-queries.md +9 -6
  172. package/skills/weaver-e10-meeting/references/meeting-verification.md +8 -6
  173. package/skills/weaver-e10-meeting.zip +0 -0
  174. package/skills/weaver-e10-okr/SKILL.md +5 -5
  175. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  176. package/skills/weaver-e10-plan/SKILL.md +5 -5
  177. package/skills/weaver-e10-qiyecheng/SKILL.md +5 -2
  178. package/skills/weaver-e10-qiyecheng/references/catalog.md +2 -2
  179. package/skills/weaver-e10-qiyecheng/references/expense-chart.md +15 -1
  180. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +22 -21
  181. package/skills/weaver-e10-shared/SKILL.md +12 -12
  182. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +4 -4
  183. package/skills/weaver-e10-wenshuding/SKILL.md +5 -5
  184. package/skills/weaver-e10-workflow/SKILL.md +29 -5
  185. package/skills/weaver-e10-workflow/aigroup/default.json +88 -0
  186. package/skills/weaver-e10-workflow/references/todo-smart-convert.md +66 -14
  187. package/skills/weaver-e10-workflow/references/workflow-agent-entry.md +1 -1
  188. package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -1
  189. package/skills/weaver-e10-workflow/references/workflow-query.md +12 -10
  190. package/skills/weaver-e10-workflow/references/workflow-view.md +2 -2
  191. package/skills/weaver-e10-workflow/tools/todo-serve.cjs +239 -0
  192. package/skills/weaver-e10-workflow/{scripts → tools}/todo-summary.cjs +218 -28
  193. package/skills/weaver-e10-yepiaotong/SKILL.md +10 -8
  194. package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +7 -7
  195. package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +10 -10
  196. package/skills/weaver-e10-yepiaotong/references/reim-examples.md +40 -37
  197. package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -4
  198. package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +27 -38
  199. package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +4 -4
  200. package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +37 -29
  201. package/skills/weaver-e10-yimiaoban/SKILL.md +156 -33
  202. package/skills/weaver-e10-yimiaoban/references/ding-write.md +1 -1
  203. package/skills/weaver-e10-yimiaoban/references/error-codes.md +5 -1
  204. package/skills/weaver-e10-yimiaoban/references/group-read.md +5 -1
  205. package/skills/weaver-e10-yimiaoban/references/group-write.md +6 -4
  206. package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -0
  207. package/skills/weaver-e10-yimiaoban/references/msg-write.md +34 -2
  208. package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +5 -2
  209. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +79 -58
  210. package/skills/weaver-e10-yimiaoban/references/user-remind.md +2 -2
  211. package/skills/weaver-e10-ziguanjia/SKILL.md +5 -5
package/docs/im.md CHANGED
@@ -26,7 +26,7 @@ weaver-work-cli --json im run <operation> --input-json '{"key":"value"}'
26
26
 
27
27
  ## 认证
28
28
 
29
- 复用 `src/internal/e10` 的 E10 会话(`requireE10Session`),请求自动携带 `Cookie`、`eteamsid` 与 `X-Requested-With: XMLHttpRequest`。IM 接口前缀 `/api/em/msg/executeIm`,必达例外走 `/api/em/msg/createDing`。业务代码不接触认证目录,路径强制以 `/api/` 开头。
29
+ 复用 `src/internal/e10` 的 E10 会话(`requireE10Session`),请求自动携带 `Cookie`、`eteamsid`、`User-Agent: AgentType=<agentType>,IsAgent=true`(由 `request-runtime` 与 `session.uaHeader()` 统一注入,`RESERVED_HEADERS` 禁止业务侧覆盖),IM 另加 `X-Requested-With: XMLHttpRequest`。IM 接口前缀 `/api/em/msg/executeIm`,必达例外走 `/api/em/msg/createDing`。业务代码不接触认证目录,路径强制以 `/api/` 开头。
30
30
 
31
31
  ## 红线(模块内强制)
32
32
 
@@ -39,6 +39,13 @@ weaver-work-cli --json im run <operation> --input-json '{"key":"value"}'
39
39
  - 全空白文本不算内容(拒绝发送空白消息);普通请求 15 秒超时即失败不重试(上传 15/60 秒)。
40
40
  - 媒体只给需登录态的 URL,真要看内容用 `im.file.download` 落地到本地(父目录须存在、拒绝覆盖)。
41
41
  - 消息内容完整透出,不截断;展示规则见 Skill `references/safety-boundaries.md`。
42
+ - **群创建者 ≠ 群主**:`group.info` 的 `creatorUid`/`creatorCid`(服务端 `host_uid`/`host_cid`)只表示建群的人,转让群主后不变;群主只认 `group.users` 的 `role=3`(或 `group.admins`)。
43
+ - **系统成员(`cid=10002`)不是真实员工**:服务端建群时可能自动补 1 个(租户可选能力,群内系统消息载体)。`group.users` 标 `isSystem:true` 并给出排除它的 `personNum`;退群护栏的「最后一个成员」判定与成员统计都必须排除它。
44
+ - **文件上传支持秒传**:`preUploadCheck` 命中同 MD5 已有文件时服务端只返回 `uploadType:"second"` + `fileObj`(没有 `preUploadId`),`host.uploadFile` 直接复用该 `fileObj` 并跳过 `valid/upload`,同一图片/文件可反复发送。
45
+ - **群聊 @ 提及**(`src/shortcuts/im/operations/at-mention.ts`):只能通过 `sendGroupMsg` 的 **`msg` 字段**(完整原生 msg JSON)携带 `txt.aus`(@具体人 `t=1`,@所有人固定 `{cid:'10000',id:'88',nm:'全体成员',t:'2'}`),`txt.v` 中 @ 位置写 `:@<id>;` 占位符。**`txt` 字段传 JSON 字符串是错的**——服务端会原样塞进 `dt[0].txt.v`,客户端直接显示 JSON 原文(实测踩坑)。CLI 入参:`txt` 写 `@<姓名>` + `atUids`/`atAll`;@具体人 prepare 阶段经 `getGroupUsers`(member_mask=6)逐个核实在群,姓名一律走 hrm 解析。
46
+ - **群聊引用/回复**(`src/shortcuts/im/operations/quote-mention.ts`):与 @ 同款承载方式——msg JSON 顶层挂 `ref`(引用)或 `rmsg`(回复,多一个 `oid`):`{id:<被引消息id>, t:<被引type>, f:'0', time:<被引毫秒时间戳>, fname:<被引人>, fuser:{cid,uid}, rcon:<被引内容纯文本>, display:''}`。CLI 入参 `quoteMsgId`/`replyMsgId`(互斥),prepare 阶段用 `syncGroupMsg`(`start=<id+1e9>, end=<id-1e9>`,开边界)单条定位被引消息后自动组装;**单聊仅支持引用**(`im.msg.send.single` 接受 `quoteMsgId`,定位走 `syncSingleMsg`;`replyMsgId` 报 `reply_not_supported`),单聊发送同样把 msg JSON 放 `msg` 字段。发送者信息(suid/sname)服务端自动补全。拉取侧原始 msg JSON 顶层即含 ref/rmsg,CLI 已解析为行内 `quote` 摘要。
47
+ - **失败信封双写**:`ok:false` 的 JSON 同时写 stdout 与 stderr(stdout 为主通道,stderr 兼容历史判断),调用方只读 stdout 也不会丢错误。
48
+ - **请求级追踪**:`im --trace`(或 `WEAVER_WORK_CLI_TRACE=1`)在 stderr 逐请求打 `[trace] METHOD path op=... status=... 耗时`,不含 Cookie/eteamsid,用于排障与接口计数(实现位于 `src/shortcuts/im/diagnostics.ts`,不改公共 runtime)。
42
49
 
43
50
  ## 消息拉取与展示
44
51
 
@@ -116,7 +116,7 @@ collect 输出的 `groupingBrief` 使用组内 1-based `idx`。模型生成 `aiG
116
116
  }
117
117
  ```
118
118
 
119
- `totalCount` = **按 `requestId` 去重后的条数**(= collect 取到的全部条数),**不是** `wfIdGroup[].count` 之和(优先组是叠加视图)。只有优先组 `defaultExpanded=true`;普通组先放汇总项,再放单条。
119
+ `totalCount` = **按 `requestId` 去重后的条数**(= collect 取到的全部条数),**不是** `wfIdGroup[].count` 之和(优先组是叠加视图)。大分组(优先组与普通组)`defaultExpanded=true`,只有汇总项(`type:"group"`)为 `false`;普通组先放汇总项,再放单条。
120
120
 
121
121
  ## 5. 详情、单条摘要和组摘要
122
122
 
@@ -57,7 +57,7 @@ CLI 输出信封 { schemaVersion, ok, operation, data, meta, warnings }
57
57
  | `topPriority` | boolean | 只有「建议优先处理的流程」为 `true` |
58
58
  | `title` | string | 优先组固定文案;普通组 = `workflowName` |
59
59
  | `count` | number | **= 该组 `displayItems` 摊平后的条数**(回灌时会重算,不采信输入里的值) |
60
- | `defaultExpanded` | boolean | 只有优先组 `true`;普通组与汇总项恒 `false` |
60
+ | `defaultExpanded` | boolean | 大分组(优先组与普通组)恒 `true`;只有汇总项(`type:"group"` 的 ai二次分组)是 `false` |
61
61
  | `displayItems` | array | 混合数组:汇总项(`type:"group"`)在前,单条(`type:"request"`)在后 |
62
62
 
63
63
  优先组是**叠加视图**:入选优先组的条目**仍保留在各自工作流组里**(优先组只是置顶入口)。因此 Σ`count` > `totalCount` 是正常现象,差值 = 优先组条数。
@@ -112,7 +112,7 @@ CLI 输出信封 { schemaVersion, ok, operation, data, meta, warnings }
112
112
  | 3 | 每条待办在**一个组内**只出现一次;优先组的条目会同时出现在其工作流组(叠加视图) | `used` 集合 / `selectPriorityRows()` |
113
113
  | 4 | 组内 <3 条一律平铺单条,**不产生任何汇总项**(给了 `aiGroups` 也忽略) | `GROUP_MIN_ITEMS_FOR_SUBGROUP = 3` |
114
114
  | 5 | 汇总项 `id` = `父组id-序号`,序号从 1 起且仅在组内唯一 | `groupItemsOf()` |
115
- | 6 | 只有优先组 `defaultExpanded = true`;汇总项恒 `false` | `runSmartGroup()` 返回处 |
115
+ | 6 | 大分组(优先组 + 普通组)`defaultExpanded = true`;只有汇总项恒 `false` | `runSmartGroup()` / `validateFinalGroups()` |
116
116
  | 7 | 业务对象只有三个键;诊断信息只能在 `meta` | `finish()` + `planTodoOutput()` |
117
117
  | 8 | 所有 ID 一律 string;除计数类(`count`/`totalCount`)与标记类(`isremark`/`requestLevel`)外不得是 number | `readAiGroups()` 等校验 |
118
118
  | 9 | 子组至少 2 条(<2 解散后条目平铺);不存在 `other` 兜底汇总项 | `runSmartGroup()` 子组收口 |
@@ -4,6 +4,12 @@
4
4
  > 源码:`todoSmartConvert.smartGroup.ts`、`businessRules.ts`、`todoSmartConvert.group.ts`
5
5
  > 核对日期:2026-10-27(ai二次分组改造后定稿:删除 `other` 汇总项、<3 条硬门槛不再被计划覆盖、意图表驱动、详情缓存)
6
6
 
7
+ > **⚠️ 2026-10-28 起:分组规则已外置到 JSON,代码不再按业务类型分支。**
8
+ > 唯一真源是 `skills/weaver-e10-workflow/aigroup/default.json`(`{defaults, rules[]}`,随 skill 分发、只读),用户意图另存 **CLI 状态目录**下的 `aigroup/user-intents.json`(`weaver-work-cli aigroup set` 写入,刻意不落 skill 目录,避免被打包带走)。
9
+ > 现行规则要点:①没有 `aiGroup` ⇒ 全平铺;②`focus:true` ⇒ 按 `focusKeyword`(`[指标, 算子, 值]`,十种算子)确定性成一组,`groupTitle` 为组名,`sysArg` 指明指标取自列表属性还是流程详情;③`focus:false` ⇒ `aiContext`(流程标题/流程详情)交 AI 分组,**必须**给 `aiGroups`;④`focus:true` 收到多个计划子组时**只保留条数最多的一个**,其余平铺;⑤`aiGroups.seq` 已删除,只认 `requestIds`;⑥组摘要 `groupSummary.needAI:false` 时由 CLI 按 JSON `template` 渲染,`true` 时交 AI;⑦单条摘要由 `needSummary` 决定(false ⇒ 用标题)。
10
+ > 下面各节是按类型描述的**历史口径**,仅作背景参考;与本节冲突时以本节与 `default.json` 为准。
11
+
12
+
7
13
  ## 0. 一句话
8
14
 
9
15
  大组是否做 ai二次分组、怎么分,由 **「业务类型」+「用户意图是否适用本组」+「有没有给本组计划」+「组内条数门槛」** 四个因素决定;CLI 负责判定与兜底,AI 只提供「子组怎么切、叫什么名」。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "weaver-work-cli",
3
- "version": "0.1.32",
3
+ "version": "0.1.36",
4
4
  "description": "面向泛微工作工具链的可扩展 TypeScript CLI 基础框架(E10 业票通等能力)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,6 +29,24 @@
29
29
  "紧急程度",
30
30
  "参与人"
31
31
  ],
32
+ "weaver-e10-cowork": [
33
+ "协作",
34
+ "协作区",
35
+ "协作事项",
36
+ "工作协作",
37
+ "讨论",
38
+ "回复讨论",
39
+ "协作参与人",
40
+ "共享权限",
41
+ "申请加入",
42
+ "待我审批",
43
+ "我关注的",
44
+ "我收藏的",
45
+ "我的事项",
46
+ "相关我",
47
+ "结束协作",
48
+ "协作版块"
49
+ ],
32
50
  "weaver-e10-meeting": [
33
51
  "会议",
34
52
  "会议室",
@@ -0,0 +1,14 @@
1
+ 本业务域用于 E10 协作区(工作协作)。入口 `SKILL.md` 只做路由与执行纪律:CRITICAL 共享前置、命令面、按场景读 reference、写操作 prepare→确认→apply 协议、输出纪律。具体 operation、字段与失败处理拆到 `references/`:
2
+
3
+ - `cowork-read.md`:13 类列表(scope)、搜索条件元数据、计数、详情、讨论记录、参与人、关联资源、投票日志、版块表单、元数据、共享权限列表。
4
+ - `cowork-write.md`:新建/结束协作、隐藏/投票、发布讨论、讨论置顶/删除/审批、成员邀请/重新加入/申请加入、加入申请审批、事项与交流审批台、共享对象增删。
5
+ - `safety-boundaries.md`:未实现能力(浏览选择器、点赞组件、权限单元高级配置、搜索 UI 元数据)、红线、能力边界与可见性。
6
+
7
+ Agent 调优重点:
8
+
9
+ - `weaver-work-cli cowork schema` 是 operation 合约第一信息源,契约外的命令与参数一律禁止。
10
+ - 业务输入不得包含 Cookie、ETEAMSID、Token、UA;认证与请求头由 `weaver-e10-shared` 与 CLI 托管。
11
+ - 列表筛选用「值字段 + 对应 `*Condition`」;`itemStatus` 取 `1` 进行中 / `2` 已结束(`0` 等于全部)。
12
+ - 动作类写操作(审批、删除、置顶、审批台)的 id 必须先由对应列表查询取得,禁止凭示例或猜测提交。
13
+ - 写操作只接受 CLI 生成的 `continuation`,`confirm=true` 必须在用户明确确认后传入;`partial/write_uncertain` 时先核对现状,禁止自动重试。
14
+ - 查询为空如实说明「没有符合条件的协作或无权查看」,不要断言系统里没有,也不要改用相邻接口拼凑。
@@ -1,11 +1,11 @@
1
1
  本业务域用于泛微 E10 易秒办即时通讯(消息/群组/会话/系统消息),包括读与写;Skill 名是 `weaver-e10-yimiaoban`,CLI 命令后缀是 `im`(`weaver-work-cli im run im.<capability>.<action>`)。
2
2
 
3
- 入口 `SKILL.md` 先路由到 `weaver-e10-shared/SKILL.md`,再给出 Reference 路由表、关键差异(消息行已解析且标注「我」、人名走 hrm、本人 cid/uid 只用于本机组装、uid/cid 字符串化、有界区间自动翻页且边界去重、时间范围转 id 区间并强制收敛 7 天、1303 空页说明、媒体需下载落地、展示完整不截断)与写操作 prepare→apply 协议。具体用法按「一个能力一个文档」拆到 `references/`:
3
+ 入口 `SKILL.md` 先路由到 `weaver-e10-shared/SKILL.md`,再按标准结构给出:路由优先级(高优先级语义 + 判定规则 + 常见误用)、选哪个命令(想做什么 / 命令 / reference 三列)、处理链(拉记录/发消息/必达/建群/免打扰/取附件/查系统消息的常见多步链路)、执行原则(最小必要信息、大结果摘要、已知对象直达、错误语义驱动、附件与文件解析确认)、关键差异(消息行已解析且标注「我」、人名走 hrm、本人 cid/uid 只用于本机组装、uid/cid 字符串化、有界区间自动翻页且边界去重、时间范围转 id 区间并强制收敛 7 天、1303 空页说明、媒体需下载落地、展示完整不截断)、写操作 prepare→apply 决策树、输出与展示规则、失败处理与禁用边界。请求头三件套只做一行指针指向 `weaver-e10-shared` 的「请求头契约」,不复制代码块。具体用法按「一个能力一个文档」拆到 `references/`:
4
4
 
5
5
  - `person.md`:姓名/工号/手机/邮箱解析、uid 批量解析(人名唯一合法来源,走 hrm)。
6
6
  - `field-resolution.md`:名称 → ID 判定、同名消歧、未匹配处理、接口间上下文传递契约。
7
7
  - `msg-read.md`:单聊/群聊消息拉取、群置顶、阅读状态(只读;每页 50、有界区间自动翻页、无界单页续拉、7 天收敛、1303 按空处理)。
8
- - `msg-write.md`:发单聊/群聊(文本/图片/文件)、撤回、群消息置顶的 prepare→apply 写入协议。
8
+ - `msg-write.md`:发单聊/群聊(文本/图片/文件,群聊文本支持 @ 提及:`txt` 写 `@<姓名>` + `atUids`/`atAll`,@具体人 prepare 核实在群;引用/回复:`quoteMsgId`/`replyMsgId` 传被引消息 id,**单聊仅支持引用**)、撤回、群消息置顶的 prepare→apply 写入协议。
9
9
  - `ding-write.md`:普通必达与转必达(createDing)、仅未读/指定接收人的 prepare→apply 写入协议。
10
10
  - `group-read.md`:群搜索/信息/成员/群主管理员/存在性/公告(只读)。
11
11
  - `group-write.md`:建群/邀请/踢/退/解散/申请入群/改群属性/群名/群公告的 prepare→apply 写入协议。
@@ -21,4 +21,4 @@
21
21
  - `weaver-work-cli im schema` 是 operation 合约第一信息源;所有 operation 名与 `inputSchema` 以它为准。
22
22
  - 人名/群成员姓名一律由 CLI 走 hrm 解析;媒体展示用 `[图片]名称`/`[文件]名称`/`[视频]名称`、必达加 `[必达]`,预览/下载 URL 需登录态,真正查看用 `im.file.download` 落地。
23
23
  - 消息正文完整展示不截断、最新在前;`|` 转义、换行保留提示;禁止把长文缩成摘要后再展示。
24
- - 写操作只接受 CLI 签发的 continuation;`apply` 不确定结果时先只读回查,不自动重试。
24
+ - 写操作只接受 CLI 签发的 continuation;`apply` 返回 `ok:true` 即成功并直接汇报,**不做二次校验**(不拉群成员/群消息/群信息/会话列表去证明);仅在结果未知时说明情况,是否回查由用户决定,不自动重试。
@@ -15,7 +15,7 @@ cliHelp: "weaver-work-cli {{command}} --help"
15
15
 
16
16
  **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`——省略会装进默认目录,导致本技能依然读不到共享规则。安装或读取失败时必须停止执行;命令均成功后重新读取共享规则,仍读不到就停止并把结果报告用户,不得凭猜测继续。**
17
17
  认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
18
- 业务命令返回 `authentication` / `session_expired` 时必须停止并读取共享认证规则:Agent 复用任务开始时的宿主判定且禁止调用任何其他登录 Skill;明确为 XiaoE 时只执行 `weaver-work-cli auth xiaoe`,返回 `xiaoe_credential_unavailable` 时停止且不自动改用浏览器登录;非 XiaoE 时取得用户确认的真实 E10 域名后执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。登录恢复后读操作可重放,写操作必须重新 prepare 和确认,`partial` / `write_uncertain` 必须先只读回查。
18
+ 业务命令返回 `session_expired` 且已有会话来自 XiaoE 时,CLI 已在底层自动换票并重放一次;Agent 不得再执行登录命令、调用其他登录 Skill 或重复业务命令,只反馈最终结构化错误。仅首次无会话或明确的 `auth not found` 才读取共享认证规则:明确为 XiaoE 时执行一次 `weaver-work-cli auth xiaoe`,若返回 `xiaoe_credential_unavailable` 则停止;非 XiaoE 时取得用户确认的真实 E10 域名后执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。显式登录后写操作必须重新 prepare 和确认,`partial` / `write_uncertain` 必须先只读回查。
19
19
  所有命令通过 `weaver-work-cli --json {{command}} run <operation>` 执行:简单 JSON 优先传 `--input-json '<json>'`,复杂或多行 JSON 先写入 UTF-8 文件再传 `--input <path>`,只有确认当前 shell 能稳定传管道时才使用 `--input -`。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段;**references 是第一信息源**,`weaver-work-cli {{command}} schema` 是 operation、字段和风险等级的合约来源。
20
20
  若 `schema` 或 reference 提供 `inputExamples`,优先复用其中和当前意图最接近的样例并只替换用户明确给出的值;标记为 `synthetic` 的样例需要业务复核,不能当作源资料事实。若 operation 标记了 `missingExamples` 或参数覆盖矩阵中的 `needs-confirmation` 字段,先向用户说明缺少哪些入参事实并索取补充,不要通过反复尝试不同 JSON 格式来猜。
21
21
  生成或改写的 docs、reference、提示词和命令示例必须同时兼容 Windows 和 macOS/Linux。凡涉及 JSON 输入、用户目录、路径分隔符、Python 启动器、文件删除、目录查看或文件比对,必须同时给出 Windows PowerShell 与 macOS/Linux(bash/zsh)两套示例;Agent 先根据当前系统和 shell 选择对应示例,不确定时用 `node -p "process.platform"` 判断。Windows/PowerShell 示例不要使用 `printf`、`$HOME/...`、`~/...`、bash 反斜杠续行、`rm/ls/diff/python3` 等 Unix-only 写法。
@@ -102,11 +102,11 @@ weaver-work-cli --json blog run blog.query --input-json '{"user_type":"myFollow"
102
102
  2. `target_changed` / `publish_already_exists` → 重新 prepare,再向用户确认。
103
103
  3. `partial/write_uncertain` → 停止,不做任何写重试;用 `blog.query_user` 只读回查后向用户报告。
104
104
  4. `authentication/session_expired` → 立即停止当前操作并读取 shared 认证规则。
105
- - 登录失效的认证方式必须由 Agent 复用本任务开始时的宿主判定,禁止调用任何其他登录 Skill。
106
- - 明确为 XiaoE 时,只执行 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。
107
- - 统一登录返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用,不自动回退浏览器登录。
108
- - 非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
109
- - 登录恢复后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
105
+ - 已有 XiaoE 会话的 `session_expired` 已由 CLI 底层自动换票并重放一次;若错误最终仍返回,Agent 只反馈并停止,不执行任何登录命令、其他登录 Skill 或原业务命令。
106
+ - 仅首次无会话或明确的 `auth not found` 才由 Agent 复用任务开始时的宿主判定。
107
+ - 首次认证明确为 XiaoE 时,执行一次 `weaver-work-cli auth xiaoe`;返回 `authentication/xiaoe_credential_unavailable` 时停止,不回退浏览器登录。
108
+ - 首次认证且非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
109
+ - 显式登录后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
110
110
 
111
111
  ## 不在范围
112
112
 
@@ -141,11 +141,11 @@ Windows/PowerShell 下不要使用 `printf`、`$HOME/...`、`~/...`、bash 反
141
141
  - **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个 operation。**
142
142
  - 写请求已经发出后遇到结果不确定必须停止;不要把 `.apply` 当成可重试的读操作。
143
143
  - **错误为 `authentication` 或 `session_expired` 时:立即停止当前操作,不要用示例占位域名或自行猜域名登录,也不要盲目重试。** 先读取同级 `weaver-e10-shared` 的认证规则。
144
- - 登录失效的认证方式必须由 Agent 复用本任务开始时的宿主判定,禁止调用任何其他登录 Skill。
145
- - 明确为 XiaoE 时,只执行 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。
146
- - 统一登录返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用,不自动回退浏览器登录。
147
- - 非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
148
- - 登录恢复后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
144
+ - 已有 XiaoE 会话的 `session_expired` 已由 CLI 底层自动换票并重放一次;若错误最终仍返回,Agent 只反馈并停止,不执行任何登录命令、其他登录 Skill 或原业务命令。
145
+ - 仅首次无会话或明确的 `auth not found` 才由 Agent 复用任务开始时的宿主判定。
146
+ - 首次认证明确为 XiaoE 时,执行一次 `weaver-work-cli auth xiaoe`;返回 `authentication/xiaoe_credential_unavailable` 时停止,不回退浏览器登录。
147
+ - 首次认证且非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
148
+ - 显式登录后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
149
149
  - 共享规则不可用时停止并告知用户,不在业务 Skill 中猜测登录方式。
150
150
  - `continuation_*` / `plan_changed` / `file_changed` 一律重新 prepare,不要试图修改票据或只改 apply 入参。
151
151
  - **明确的业务错误直接转达,不要深挖**:服务端返回的业务提示(如「该附件不支持转为 PDF」「无该文档的共享权限」)是权威结论,直接转述给用户并给出应对建议;不要翻查源码、写调试脚本或追查原始响应找「为什么」。只有错误提示本身含糊(空 message、`INTERNAL_ERROR`)时才进一步诊断。
@@ -80,11 +80,11 @@ weaver-work-cli --json calendar run <operation> --input-json '{"key":"value"}'
80
80
 
81
81
  - 遇到 `partial`、`write_uncertain`、登录失效、回查失败或网络中断,立即停止当前写流程,不自动重试写入。
82
82
  - 认证类错误(`authentication`/`session_expired`):停止当前操作并读取 `weaver-e10-shared` 的认证规则。
83
- - 登录失效的认证方式必须由 Agent 复用本任务开始时的宿主判定,禁止调用任何其他登录 Skill。
84
- - 明确为 XiaoE 时,只执行 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。
85
- - 统一登录返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用,不自动回退浏览器登录。
86
- - 非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
87
- - 登录恢复后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
83
+ - 已有 XiaoE 会话的 `session_expired` 已由 CLI 底层自动换票并重放一次;若错误最终仍返回,Agent 只反馈并停止,不执行任何登录命令、其他登录 Skill 或原业务命令。
84
+ - 仅首次无会话或明确的 `auth not found` 才由 Agent 复用任务开始时的宿主判定。
85
+ - 首次认证明确为 XiaoE 时,执行一次 `weaver-work-cli auth xiaoe`;返回 `authentication/xiaoe_credential_unavailable` 时停止,不回退浏览器登录。
86
+ - 首次认证且非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
87
+ - 显式登录后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
88
88
  - 接口返回 404 或提示「找不到动作流」:日程应用可能未安装,先运行 `calendar.app.check` 检测,再决定是否停止。
89
89
  - 业务失败看 stderr JSON 的 `error.type` / `error.subtype` / `error.message`。
90
90
 
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: weaver-e10-cowork
3
+ agent_created: true
4
+ display_name: 泛微E10协作区
5
+ display_name_en: Weaver E10 Cowork
6
+ description: E10协作模块技能,认证由weaver-e10-shared与weaver-work-cli托管后直调协作接口,支持协作列表/详情查询、审批与退出、共享权限、行为操作,秒级返回,禁用浏览器自动化。
7
+ description_zh: E10协作模块技能,经weaver-e10-shared托管的CLI会话直调协作REST接口,支持按主题查询协作列表、查询协作详情,以及审批与退出、共享权限、行为等操作;秒级返回结构化结果;禁用浏览器自动化路径,所有接口地址与会话凭证由weaver-work-cli统一提供。
8
+ description_en: E10 Cowork skill that calls cowork REST APIs directly with a CLI-managed session described by weaver-e10-shared, supporting list-by-topic, detail queries, approval/quit, share-permission and behavior operations in seconds; browser automation disabled; all endpoint URLs and credentials are provided by weaver-work-cli.
9
+ category: business
10
+ version: 2.0.0
11
+ author: 泛微网络科技股份有限公司
12
+ permissions: [network]
13
+ execution:
14
+ entry_mode: file
15
+ profile: node-readonly
16
+ requires:
17
+ bins: ["weaver-work-cli"]
18
+ cliHelp: "weaver-work-cli cowork --help"
19
+ ---
20
+
21
+ **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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
22
+ **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
23
+
24
+ # 泛微 E10 协作区
25
+
26
+ ## 概述
27
+
28
+ 所有协作能力都通过 `weaver-work-cli cowork` 执行:`schema` 看合约,`run <operation>` 跑具体动作。认证、Cookie/eteamsid/UA 由 CLI 统一注入,本技能不接触任何凭证。
29
+
30
+ ## 触发条件
31
+
32
+ 用户提到协作、协作事项、协作区、讨论/回复、工作协作、参与人、共享权限、申请加入、审批我的协作、我关注的/我收藏的/我的事项/相关我等,即进入本技能。
33
+
34
+ ## 命令面
35
+
36
+ ```text
37
+ # 看全部 operation 与参数(唯一权威合约)
38
+ weaver-work-cli cowork schema
39
+
40
+ # 执行任意 operation
41
+ weaver-work-cli cowork run cowork.list --input-json '{"scope":"main","itemName":"项目","itemNameCondition":"bl"}'
42
+ ```
43
+
44
+ 高频便捷命令(内部同样走 operation):
45
+
46
+ | 命令 | 等价 operation |
47
+ |---|---|
48
+ | `cowork list [--scope] [--keyword]` | `cowork.list`(默认 scope=main 进行中) |
49
+ | `cowork view --id <协作id>` | `cowork.view` |
50
+ | `cowork discussions --id <协作id>` | `cowork.discuss.list` |
51
+ | `cowork sections` | `cowork.form`(取版块下拉选项) |
52
+ | `cowork reply --id <协作id> --content <文本>` | `cowork.discuss.publish.prepare` |
53
+
54
+ ## 平台兼容
55
+
56
+ 命令示例同时兼容 Windows 与 macOS/Linux。简单 JSON 用 `--input-json`,复杂 JSON 存 UTF-8 文件后用 `--input <path>`;JSON 里的双引号在两种 shell 下都保持原样,不要转义。
57
+
58
+ Windows PowerShell:
59
+
60
+ ```powershell
61
+ weaver-work-cli cowork run cowork.list --input-json '{"scope":"main","itemName":"项目","itemNameCondition":"bl"}'
62
+ ```
63
+
64
+ macOS/Linux(bash/zsh):
65
+
66
+ ```bash
67
+ weaver-work-cli cowork run cowork.list --input-json '{"scope":"main","itemName":"项目","itemNameCondition":"bl"}'
68
+ ```
69
+
70
+
71
+ ## 按场景读 reference
72
+
73
+ | 触发条件 | Reference |
74
+ |---|---|
75
+ | 协作/关注/收藏/我的事项/我的讨论/相关我/申请/待审批/审批日志/退出 列表,协作详情、讨论记录、参与人、关联资源、投票日志、版块表单、共享权限列表、搜索条件元数据 | [`references/cowork-read.md`](references/cowork-read.md) |
76
+ | 新建协作、结束协作、隐藏/投票、发布讨论、讨论置顶/取消置顶/删除/审批、邀请/重新加入/申请加入、加入申请审批、事项审批台、交流审批台、新增/删除共享对象(写,prepare→apply) | [`references/cowork-write.md`](references/cowork-write.md) |
77
+ | 不支持的能力(浏览选择器、点赞组件、权限单元高级配置、搜索 UI 元数据)、禁止项与边界 | [`references/safety-boundaries.md`](references/safety-boundaries.md) |
78
+
79
+ ## 执行纪律(强制)
80
+
81
+ - **同一命令连续 2 次失败必须停止**:原样反馈报错与已尝试命令,禁止换参数盲目重试。
82
+ - **禁止读脚本源码猜调用**:命令/参数只来自本文件、references 或 `cowork schema`,契约外一律禁止。
83
+ - **动作类写操作必须先查真实 id**:审批/删除/置顶等下一步动作,id 必须来自对应列表查询结果,禁止凭示例或猜测提交。
84
+ - **禁止臆造**:接口未返回的字段不编造;列表为空如实提示。
85
+
86
+ ## 写操作协议
87
+
88
+ 所有写操作都是 `prepare → 用户确认 → apply`:
89
+
90
+ 1. `prepare` 只做只读回查(确认目标存在、取真实值),返回 `preview` 摘要 + `continuation`,**不写库**。
91
+ 2. 把 preview 摘给用户,等明确确认。
92
+ 3. `apply` 必须同时带 `confirm: true` 与 `continuation`;缺少任一项直接拒绝。
93
+
94
+ `apply` 返回 `partial/write_uncertain` 时:写请求可能已生效,**禁止自动重试**,先用对应查询 operation 核对现状。
95
+
96
+ ## 输出纪律
97
+
98
+ - 只输出业务结果:协作主题、状态、负责人、时间、参与人、申请人与结论等中文信息 + 产物链接。
99
+ - **不展示**内部执行明细:`preview`/`summary` 原始结构、`continuation`、`formDataId`/`coworkId` 等内部 id、`warnings` 细目、HTTP 状态码。
100
+ - 成功即略过过程;失败且影响结果时,用一句人话说明并给下一步建议。
101
+ - 查询为空如实说明「没有符合条件的协作」,不要编造条目。
@@ -0,0 +1,90 @@
1
+ # 协作区读操作
2
+
3
+ > 命令统一为 `weaver-work-cli cowork run <operation> --input-json '<json>'`。
4
+ > 认证与请求头由 `weaver-e10-shared` 托管;本文件不含任何凭证。
5
+
6
+ ## 1. 列表:`cowork.list`(一个 operation 覆盖 13 类列表)
7
+
8
+ | scope | 含义 | 关键筛选字段 |
9
+ |---|---|---|
10
+ | `main` | 协作列表(默认进行中) | itemName / sectionId / principal / creator / creatorSearch / tagId / tagCommonId |
11
+ | `attention` | 我关注的 | itemName / sectionId |
12
+ | `collect` | 我收藏的 | itemName + orderBy(collectTime) / sortOrder |
13
+ | `mineDiscuss` | 我的讨论 | itemName(tabKey 可省) |
14
+ | `mineComment` | 我的评论 | itemName |
15
+ | `mineItem` | 我的事项 | tabKey:`mineItemCreate`(我创建,默认)/ `mineItemParticipate`(我参与) |
16
+ | `related` | 相关我 | discussFrom(默认 relatedMenu) |
17
+ | `apply` | 申请加入列表 | itemName / sectionId / itemStatus |
18
+ | `approve` | 待我审批(加入申请) | applyer / applyerDept / itemName |
19
+ | `log` | 审批日志 | approver / applyStatus / itemName |
20
+ | `quit` | 退出列表 | itemName / sectionId |
21
+ | `itemApprove` | 事项审批台 | itemName / sectionId / principal / creator |
22
+ | `discussApprove` | 交流审批台 | 仅分页 + dateType |
23
+
24
+ Windows PowerShell:
25
+
26
+ ```powershell
27
+ weaver-work-cli cowork run cowork.list --input-json '{"scope":"main","itemName":"项目","itemNameCondition":"bl","current":1}'
28
+ ```
29
+ macOS/Linux(bash/zsh):
30
+
31
+ ```bash
32
+ weaver-work-cli cowork run cowork.list --input-json '{"scope":"main","itemName":"项目","itemNameCondition":"bl","current":1}'
33
+ ```
34
+
35
+ **筛选写法**:值字段 + 对应 `*Condition`(`in` 精确 / `bl` 模糊),如 `itemName` + `itemNameCondition`、`principal` + `principalCondition`、`applyer` + `applyerCondition`。
36
+
37
+ **`itemStatus` 口径(实测,别搞反)**:`1`=进行中(默认)、`2`=已结束;**`0` 会被后端当作「全部」**,不是草稿。要查已结束的协作用 `itemStatus:"2"`。
38
+
39
+ **返回**:`data` 是行数组,`meta` 带 `current/pageSize/total/scope`。`meta.total` 缺失表示该列表计数不可用,此时不要编造总数。
40
+
41
+ ## 2. 搜索条件元数据:`cowork.conditions`
42
+
43
+ 列表能筛哪些字段、有哪些枚举,以它返回的 `groups[]` / `layout[]` 为准。scope 与上表基本对应(另有 `discuss` 用于讨论列表)。
44
+
45
+ > 遇到「这个列表能按 X 筛吗」不确定时,先调 `cowork.conditions`,不要猜字段名。
46
+
47
+ ## 3. 协作总数:`cowork.count`
48
+
49
+ 参数 `hidden`(默认 `"0"`)、`itemStatus`(默认 `"1"`)。返回一个数字。
50
+
51
+ ## 4. 详情:`cowork.view`
52
+
53
+ 参数 `id`(协作 id)。返回含 `itemName` / `itemStatus` / `sectionId` / `canEdit` / `canEnd` / `canReply` / `approvalRight` / `allowApprove` / `placedTop` 等。
54
+
55
+ **注意**:详情的 `creatorHrm` / `principalList` 只有登录名(`username`),**显示名要用 `cowork.list` 行的 `creatorName` / `principalName`**。用户要「谁创建的/负责人是谁」时,优先从列表取,或对详情只报 id 不硬猜姓名。
56
+
57
+ ## 5. 讨论记录:`cowork.discuss.list`
58
+
59
+ 参数 `coworkId`、`current`、`pageSize`、`orderColumn`(默认 `lastReply`)、`orderAsc`(默认 `false` 倒序)。
60
+
61
+ ## 6. 参与人:`cowork.participant.list`
62
+
63
+ | scope | 用途 | 参数 |
64
+ |---|---|---|
65
+ | `all` | 全部参与人(姓名/部门/岗位/全路径) | `id` + `participationFrom`(默认 participant)+ 分页 |
66
+ | `share` | 共享参与人,按角色分组(协作管理员/创建人/版块管理员/参与人/已退出/未读) | `id` |
67
+ | `quit` | 某协作的退出记录 | `id` + 分页 |
68
+
69
+ > `all` 在服务端较慢(大协作翻页慢),只要人数/姓名时优先用 `share`(已含各角色 count 与名单)。
70
+
71
+ ## 7. 其他读操作
72
+
73
+ | operation | 用途 | 参数 |
74
+ |---|---|---|
75
+ | `cowork.resource` | 协作关联资源(空时返回 `{}`) | `id` |
76
+ | `cowork.vote.log` | 投票日志(无投票 total=0) | `id` + 分页 |
77
+ | `cowork.form` | **新建协作的表单元数据**:版块下拉选项在 `data.items.sectionId.options[]`(`{id, content}`) | `id` 可省(新建留空) |
78
+ | `cowork.meta` | `operateAuth`(列表可执行操作,如能否批量删除)/ `layout`(行为布局标识) | `scope` |
79
+ | `cowork.permission.list` | 共享权限对象列表(删除共享对象前取真实记录 id) | `coworkId` + `permissionId`(默认 5)+ 分页 |
80
+
81
+ **建协作前必做**:先 `cowork.form` 取 `sectionId` 选项,把版块名对成 id —— 版块 id 跨环境不同,不能写死。
82
+
83
+ ## 8. 常见失败
84
+
85
+ | 现象 | 原因 | 处理 |
86
+ |---|---|---|
87
+ | `scope` 报枚举错 | scope 拼写不在上表 | 按上表取值;不确定就 `cowork.list` 默认 main |
88
+ | 列表为空但用户说「明明有」 | 筛选过窄或 `itemStatus` 限制 | 去掉筛选、`itemStatus:"2"` 试已结束,或调 `cowork.conditions` 核对字段 |
89
+ | 详情里没有显示名 | 接口本身只给登录名 | 用列表的 `creatorName` / `principalName`,不要拼 |
90
+ | `session_expired` | 登录态失效 | 提示用户重新登录(`weaver-work-cli auth login` 或小E 统一登录),不要重试刷接口 |
@@ -0,0 +1,131 @@
1
+ # 协作区写操作
2
+
3
+ > 全部写操作统一协议:`prepare`(只读回查 + 摘要 + continuation)→ 用户确认 → `apply`(`confirm: true` + `continuation`)。
4
+ > `apply` 缺任一项直接拒绝;返回 `partial/write_uncertain` 时禁止自动重试,先用对应读 operation 核对。
5
+
6
+ ## 1. 新建协作:`cowork.item.create.prepare` → `apply`
7
+
8
+ | 参数 | 说明 |
9
+ |---|---|
10
+ | `itemName` | 协作主题(必填) |
11
+ | `sectionId` | 所属版块 id(必填,来自 `cowork.form` 的 sectionId 选项) |
12
+ | `itemContent` | 详细说明(纯文本/HTML,CLI 内部按接口要求做 Base64) |
13
+ | `principal` | 负责人人员 id,默认当前登录用户 |
14
+ | `endTime` | 截止时间 `YYYY-MM-DD HH:mm`,默认 7 天后 |
15
+ | 开关 | `enableDiscussElog` / `enableViewLog` / `expandDetail` / `allowInvite` / `allowQuit` / `allowApply` / `allowHideDelelted`,默认全开 |
16
+
17
+ 新建协作三步(Windows PowerShell):
18
+
19
+ ```powershell
20
+ # ① 先取版块选项
21
+ weaver-work-cli cowork run cowork.form --input-json '{}'
22
+ # ② prepare(会校验 sectionId 是否在本环境真实存在)
23
+ weaver-work-cli cowork run cowork.item.create.prepare --input-json '{"itemName":"XX项目协作","sectionId":"<选项id>","itemContent":"目标与分工"}'
24
+ # ③ 用户确认后
25
+ weaver-work-cli cowork run cowork.item.create.apply --input-json '{"itemName":"XX项目协作","sectionId":"<选项id>","itemContent":"目标与分工","confirm":true,"continuation":"<continuation>"}'
26
+ ```
27
+
28
+ 新建协作三步(macOS/Linux bash/zsh):命令与上面完全一致,单引号内的 JSON 不需要转义。
29
+
30
+ ```bash
31
+ weaver-work-cli cowork run cowork.form --input-json '{}'
32
+ weaver-work-cli cowork run cowork.item.create.prepare --input-json '{"itemName":"XX项目协作","sectionId":"<选项id>","itemContent":"目标与分工"}'
33
+ weaver-work-cli cowork run cowork.item.create.apply --input-json '{"itemName":"XX项目协作","sectionId":"<选项id>","itemContent":"目标与分工","confirm":true,"continuation":"<continuation>"}'
34
+ ```
35
+
36
+ prepare 会做三件事:版块 id 存在性校验(不存在直接报错并列可选版块)、负责人默认当前用户、开关默认全开。apply 成功后返回新协作 `id`。
37
+
38
+ ## 2. 协作级动作:`cowork.item.action.prepare` → `apply`(`action: "end"`)
39
+
40
+ 结束协作。prepare 会读详情校验 `canEnd`,不可结束直接报错。
41
+ **不可逆**(结束后参与者不可回复),preview 里会带 warning,必须让用户明确确认。
42
+
43
+ ## 3. 协作标记:`cowork.item.flag.prepare` → `apply`
44
+
45
+ | action | 效果 |
46
+ |---|---|
47
+ | `hide` | 从我的列表隐藏 |
48
+ | `vote` | 标记为投票 |
49
+
50
+ ## 4. 发布/回复讨论:`cowork.discuss.publish.prepare` → `apply`
51
+
52
+ | 参数 | 说明 |
53
+ |---|---|
54
+ | `coworkId` | 协作 id(必填) |
55
+ | `content` | 讨论内容(必填,纯文本) |
56
+ | `sectionId` | 版块 id;不传则 prepare 从协作详情自动解析 |
57
+
58
+ apply 用 `replyType=discuss` + `client=pc` 提交,与页面发讨论等价。
59
+
60
+ ## 5. 讨论动作:`cowork.discuss.action.prepare` → `apply`
61
+
62
+ | action | 效果 | 额外参数 |
63
+ |---|---|---|
64
+ | `top` | 置顶讨论 | — |
65
+ | `untop` | 取消置顶 | — |
66
+ | `delete` | 删除讨论 | `isDeleteAll`(默认 true,与页面一致) |
67
+ | `approve` | 审批通过讨论 | — |
68
+
69
+ **prepare 会翻页定位该讨论**(`maxPages` 默认 5、`pageSize` 默认 50),找到后回显内容预览与作者;**找不到直接报错**,不允许对未确认的讨论执行动作。
70
+
71
+ ## 6. 成员动作:`cowork.member.action.prepare` → `apply`
72
+
73
+ | action | 效果 | 参数 |
74
+ |---|---|---|
75
+ | `invite` | 邀请他人加入 | `coworkId` + `userIds`(人员 id 数组) |
76
+ | `rejoin` | 重新加入 | `coworkId` + `userIds` |
77
+ | `join` | 申请加入(当前用户) | `coworkId` |
78
+
79
+ prepare 会读协作详情确认存在,并**提示已在参与人列表中的 userIds**(重复邀请可能无变化)。
80
+
81
+ > `userIds` 必须是真实人员 id:用 ehr 模块的人员查询能力取(如 `weaver-work-cli ehr run ehr.hr.contact.search`),禁止凭姓名猜 id。
82
+
83
+ ## 7. 加入申请审批:`cowork.apply.decide.prepare` → `apply`
84
+
85
+ | 参数 | 说明 |
86
+ |---|---|
87
+ | `decision` | `approve` 通过 / `refuse` 拒绝 |
88
+ | `applyId` | **申请记录 id**(来自 `cowork.list` scope=`approve`) |
89
+ | `maxPages` | 定位翻页上限,默认 5 |
90
+
91
+ prepare 在待审批列表里定位这条记录并回显申请人与协作主题;找不到直接报错。
92
+
93
+ ## 8. 审批台(事项 / 交流):`cowork.review.item` / `cowork.review.discuss`
94
+
95
+ 两者都是 `prepare` → `apply`,`action` 取 `approve` / `delete`。
96
+
97
+ | operation | 列表来源(取 id) |
98
+ |---|---|
99
+ | `cowork.review.item.*` | `cowork.list` scope=`itemApprove` |
100
+ | `cowork.review.discuss.*` | `cowork.list` scope=`discussApprove` |
101
+
102
+ > 事项审批台的 apply 用 `ids`,交流审批台的 apply 用 `id`(删除时带 `isDeleteAll=1`)—— 差异已封装在 operation 内,调用方按同一套参数传即可。
103
+
104
+ ## 9. 共享权限:`cowork.permission.add` / `cowork.permission.remove`
105
+
106
+ **新增**(`add.prepare` → `apply`):
107
+
108
+ | 参数 | 说明 |
109
+ |---|---|
110
+ | `coworkId`、`userId`、`userName` | 必填(接口要求展示名) |
111
+ | `userDept` / `userTitle` / `userCid` | 可选;部分环境要求齐全才接受,失败时补齐重试 |
112
+ | `permissionId` | 权限类型 id,默认 `5` |
113
+
114
+ prepare 会查现有共享列表,提示该人员是否已存在。
115
+
116
+ **删除**(`remove.prepare` → `apply`):
117
+
118
+ - 参数:`coworkId` + `pkId`(共享记录 id,来自 `cowork.permission.list`)。
119
+ - prepare 按 `pkId` 定位真实记录并回显;
120
+ - **apply 会重新取一次当前记录再全量回传**(记录可能已被他人修改),并在写后回查确认该记录已消失(返回 `removed: true`)。
121
+ - 记录已不存在 → 直接报"无需重复删除",不要重试。
122
+
123
+ ## 10. 写操作通用失败处理
124
+
125
+ | 返回 | 含义 | 正确动作 |
126
+ |---|---|---|
127
+ | `confirmation/required` | 缺 `confirm: true` | 补上确认,不要绕过 |
128
+ | `validation/target_changed` | 与 prepare 时的目标不一致(主题/版块/人员/内容变了) | 重新 prepare 再确认 |
129
+ | `not_found/discuss_not_found` / `apply_not_found` / `record_not_found` | 翻页没找到目标 | 让用户确认 id 与所属协作,**不要放宽条件硬试** |
130
+ | `partial/write_uncertain` | 写请求已发出但结果不确定 | 先用对应读 operation 核对现状,**禁止自动重试** |
131
+ | `validation/not_permitted` | 当前用户无该操作权限 | 如实告知,不要换接口绕过 |
@@ -0,0 +1,45 @@
1
+ # 能力边界与禁止项
2
+
3
+ ## 1. 已实现(可用)
4
+
5
+ 33 个 operation:读 11(列表/条件/计数/详情/讨论/参与人/资源/投票日志/表单/元数据/共享权限列表)+ 写 11 组(各 prepare/apply)。
6
+
7
+ 完整清单以 `weaver-work-cli cowork schema` 为准。
8
+
9
+ ## 2. 未实现(withheld,调用会被拒绝)
10
+
11
+ | 能力 | 涉及接口 | 为什么不做 | 替代做法 |
12
+ |---|---|---|---|
13
+ | **浏览选择器**(选部门/岗位/人员/角色/分部/渠道) | `common/browser/{associate,complete,condition,data,destData,history,leftData,prop}/<对象>` 共 32 个 | 源资料只给 path 清单、**没有请求体字段表**,逐字段建模就是猜 | 人员/部门/岗位 id 用 ehr 模块查询取得(`ehr.hr.contact.search`、`ehr.hr.browser.complete`、`hrm.org.resolve`) |
14
+ | **点赞组件**(讨论点赞/取消/投票人) | `common/upvoteComponent/{vote,cancelVote,getVoter4componentId}` | 同上,无请求体契约 | 不加点赞动作;用户要「赞」时如实说明不支持 |
15
+ | **权限单元高级配置** | `permission/table/info`、`permission/table/update` | 前端表单内部结构(对象类型/安全级别/级联规则),无稳定入参 | 常规授权/取消授权用 `cowork.permission.add` / `remove` |
16
+ | **搜索组件 UI 元数据与搜索历史** | `search/{queryCommonConditions,queryDefaultSnaps,queryHistories,queryPersonalMatchWords,querySnapsName,addToHistory}` | 前端交互行为,对 Agent 无业务语义 | 列表筛选直接用 `cowork.list` 的条件字段(字段集合以 `cowork.conditions` 为准) |
17
+
18
+ 遇到上表场景:**如实说明「该能力未开放」并给替代路径**,不要尝试用相邻接口拼凑,也不要建议用户去改环境配置。
19
+
20
+ ## 3. 禁止项(红线)
21
+
22
+ | 禁止 | 原因 |
23
+ |---|---|
24
+ | 伪造/猜测 `coworkId`、`discussId`、`applyId`、`pkId`、人员 id | 服务端按 id 直接执行,猜错会误操作真实数据 |
25
+ | 跳过 `prepare` 直接调 `apply` | apply 依赖 continuation 里的目标快照做一致性校验,绕过即失去防误写保护 |
26
+ | 缺 `confirm: true` 时重试或换写法绕开 | 确认是用户意志的唯一凭据 |
27
+ | `partial/write_uncertain` 后自动重试 | 写请求可能已生效,重试会造成重复数据(重复讨论、重复授权) |
28
+ | 用浏览器自动化/页面点击代替接口 | 本技能定位是接口直调;页面路径不稳定且无法保证幂等 |
29
+ | 读取、打印、转存任何凭证(Cookie/eteamsid/token/UA) | 认证由 `weaver-e10-shared` 与 CLI 托管,技能侧不接触 |
30
+ | 对未启用协作模块的环境强行调用 | 会连续报错;应如实告知「当前环境未启用协作模块」 |
31
+
32
+ ## 4. 能力边界(能查不能改的部分)
33
+
34
+ | 场景 | 现状 |
35
+ |---|---|
36
+ | 编辑协作正文/主题/截止时间 | **未实现**(源资料只有 `saveItemsInfo` 的新建口径,编辑口径未给字段差异)。如用户要改,说明当前只支持新建,建议到页面修改 |
37
+ | 删除整个协作 | **未实现**(源资料无协作级删除接口,只有讨论删除与审批台删除)。不要用「结束协作」冒充删除 |
38
+ | 批量操作(批量删除/批量审批) | **未实现**。列表可执行操作的元数据见 `cowork.meta`(scope=operateAuth),但不提供批量写 |
39
+ | 协作模板/重复协作 | **未实现** |
40
+ | 附件上传到讨论 | `cowork.discuss.publish` 的附件字段固定为空串(源资料未给附件流程)。用户要带附件发讨论时,说明当前不支持,建议页面发送 |
41
+
42
+ ## 5. 权限与可见性
43
+
44
+ - 所有结果都受当前登录人的权限约束:**看不到 ≠ 不存在**。查询为空时先说「没有符合条件的结果或无权查看」,不要断言系统里没有。
45
+ - `canEdit` / `canEnd` / `canReply` / `approvalRight` / `allowApprove` 来自详情接口,是判断能否操作的第一依据;prepare 阶段会用它拦截,被拦时如实转告,不要绕过。