weaver-work-cli 0.1.33 → 0.1.38
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/dist/chunks/{archive-FVFY6GZN.js → archive-PDV724YK.js} +5 -4
- package/dist/chunks/{archive-oa-NW3OD4UV.js → archive-oa-4XE4MNXQ.js} +4 -3
- package/dist/chunks/{asset-7QJKMIDV.js → asset-PDL2QE2N.js} +8 -7
- package/dist/chunks/{attachment-content-OSAVA6K3.js → attachment-content-MDDGOE5E.js} +3 -3
- package/dist/chunks/{blog-I7SDPNW4.js → blog-UYR3EUXW.js} +5 -4
- package/dist/chunks/{caizhilian-O37ZIQNY.js → caizhilian-LG2X5NMF.js} +5 -4
- package/dist/chunks/{calendar-7KXE4ED3.js → calendar-FG4BAZHE.js} +4 -3
- package/dist/chunks/{chunk-Q6LWB5HX.js → chunk-6FTTSA45.js} +4 -3
- package/dist/chunks/{chunk-MQ2I5AA3.js → chunk-6LTFIFLM.js} +3 -2
- package/dist/chunks/{chunk-WRRJ4GG2.js → chunk-CORFRD7Q.js} +4 -3
- package/dist/chunks/{chunk-WY74UBJ6.js → chunk-DMV2TOMH.js} +2194 -240
- package/dist/chunks/{chunk-MEEFGWTM.js → chunk-ELYDWBZJ.js} +135 -10
- package/dist/chunks/{chunk-EEWPQE3O.js → chunk-FUWVHMVV.js} +7 -6
- package/dist/chunks/{chunk-HEL5XTYI.js → chunk-GGJFMNJM.js} +26 -4
- package/dist/chunks/{chunk-KAS45KNR.js → chunk-IZUDA353.js} +1 -1
- package/dist/chunks/{chunk-2FLWXFVS.js → chunk-J7USS3ED.js} +4 -4
- package/dist/chunks/{chunk-IHUYP6LO.js → chunk-JSMFPO43.js} +1 -1
- package/dist/chunks/{chunk-RBGOMK4Y.js → chunk-KKRL3REV.js} +5 -4
- package/dist/chunks/{chunk-OCU4RLHC.js → chunk-NI6GIPIM.js} +195 -36
- package/dist/chunks/{chunk-PRHJGPMA.js → chunk-NR6RKXPA.js} +2 -2
- package/dist/chunks/{chunk-D223PTXU.js → chunk-OJQUJZQF.js} +33 -7
- package/dist/chunks/{chunk-ILMBNVSG.js → chunk-UJJD4QWF.js} +4 -3
- package/dist/chunks/{chunk-6ATGWRZM.js → chunk-UZZBA6PV.js} +177 -14
- package/dist/chunks/{chunk-GFPXQIY2.js → chunk-VRYHGG6O.js} +2 -2
- package/dist/chunks/{chunk-NHA62QD7.js → chunk-XJY7G4DD.js} +3 -3
- package/dist/chunks/{chunk-VBCFFFGT.js → chunk-Z32KWY6G.js} +4 -1
- package/dist/chunks/{conflict-SFNEVJY5.js → conflict-BQZEQ4SP.js} +2 -2
- package/dist/chunks/contract-XIRAFTEV.js +9111 -0
- package/dist/chunks/{cowork-CKWYHXYB.js → cowork-BLG62BL2.js} +46 -26
- package/dist/chunks/{ebuilder-form-KOLJRVZD.js → ebuilder-form-NUKG5QW4.js} +3 -3
- package/dist/chunks/{ehr-WFOC3B4D.js → ehr-2STW5ILH.js} +174 -10
- package/dist/chunks/{esb-LJZTN663.js → esb-UUDQUNKY.js} +4 -4
- package/dist/chunks/{fna-F7QRIIZC.js → fna-6RCY4NU5.js} +15 -9
- package/dist/chunks/{host-VQ6JJXGQ.js → host-7RXEDMAH.js} +3 -3
- package/dist/chunks/{host-KXPTEWFS.js → host-EJZFROU3.js} +3 -3
- package/dist/chunks/{host-BCGUVEWX.js → host-FWDOSRH5.js} +3 -3
- package/dist/chunks/{host-DGE2TZD4.js → host-RHM3NPXV.js} +3 -3
- package/dist/chunks/{host-BQBRHVR3.js → host-UFF33TWJ.js} +3 -3
- package/dist/chunks/{hrm-NI6XAKW5.js → hrm-PKJ6ELSH.js} +3 -3
- package/dist/chunks/{im-7TRTF3KT.js → im-YJAXS7CO.js} +3 -3
- package/dist/chunks/{invoice-AOXWJKYT.js → invoice-HWVSXGX6.js} +3 -3
- package/dist/chunks/{jiuchuanhui-7NQWEZAW.js → jiuchuanhui-L7VKILZB.js} +4 -3
- package/dist/chunks/{lazy-dispatch-RNS4EE4S.js → lazy-dispatch-NMYEIHRH.js} +4 -4
- package/dist/chunks/{mail-VDHJAB4O.js → mail-B42RRU7G.js} +46 -24
- package/dist/chunks/{meeting-GA7XCNNP.js → meeting-CFYVBJSS.js} +77 -12
- package/dist/chunks/{okr-TQIRERPQ.js → okr-GCLF6V7W.js} +4 -3
- package/dist/chunks/{plan-4RY4LN2P.js → plan-ZVL7GBRI.js} +4 -3
- package/dist/chunks/{project-D6XT2OC5.js → project-4YWAAE2K.js} +4 -3
- package/dist/chunks/{registry-QKMI43Q6.js → registry-EP4VTHZS.js} +8 -8
- package/dist/chunks/{registry-JHRIDQ3A.js → registry-FRJ6H7BT.js} +4 -4
- package/dist/chunks/{registry-VOGKFFTR.js → registry-SG2PGVCF.js} +2 -2
- package/dist/chunks/{room-recommend-D4EUOOWY.js → room-recommend-R3JVUUAC.js} +4 -4
- package/dist/chunks/{schedule-XPFBHPCV.js → schedule-NIJBTYDO.js} +4 -4
- package/dist/chunks/{workflow-HLBZRWIY.js → workflow-BB24DFBY.js} +11 -4
- package/dist/index.js +31 -26
- package/dist/internal/e10/auth-recovery.js +114 -1
- package/dist/internal/e10/client.js +16 -2
- package/dist/internal/e10/fetch-timing.js +31 -0
- package/dist/internal/e10/request-runtime.js +108 -7
- package/dist/shortcuts/archive/host.js +3 -2
- package/dist/shortcuts/archive-oa/host.js +2 -1
- package/dist/shortcuts/asset/host.js +6 -5
- package/dist/shortcuts/blog/host.js +3 -2
- package/dist/shortcuts/caizhilian/host.js +3 -2
- package/dist/shortcuts/calendar/host.js +2 -1
- package/dist/shortcuts/contract/host.js +2 -1
- package/dist/shortcuts/cowork/host.js +10 -1
- package/dist/shortcuts/cowork/operations/types.js +17 -2
- package/dist/shortcuts/ebuilder-form/host.js +3 -1
- package/dist/shortcuts/ehr/host.js +2 -1
- package/dist/shortcuts/ehr/operations/recruit-write.js +35 -0
- package/dist/shortcuts/ehr/operations/recruit.js +147 -0
- package/dist/shortcuts/esb/host.js +2 -1
- package/dist/shortcuts/fna/host.js +2 -1
- package/dist/shortcuts/fna/operations/expense-chart.js +19 -7
- package/dist/shortcuts/hrm/host.js +2 -1
- package/dist/shortcuts/im/host.js +3 -2
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/invoice/host.js +5 -4
- package/dist/shortcuts/jiuchuanhui/host.js +2 -1
- package/dist/shortcuts/mail/host.js +10 -1
- package/dist/shortcuts/mail/operations/types.js +17 -2
- package/dist/shortcuts/meeting/host.js +3 -2
- package/dist/shortcuts/meeting/index.js +79 -1
- package/dist/shortcuts/meeting/invitation/text.js +71 -0
- package/dist/shortcuts/meeting/manifest.js +10 -0
- package/dist/shortcuts/meeting/operations/eb/catalog.js +5 -0
- package/dist/shortcuts/meeting/operations/eb/conflict.js +6 -1
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +2105 -169
- package/dist/shortcuts/meeting/operations/eb/crm-search.js +478 -0
- package/dist/shortcuts/meeting/operations/eb/factory.js +161 -8
- package/dist/shortcuts/meeting/operations/eb/index.js +2 -0
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +36 -2
- package/dist/shortcuts/meeting/operations/eb-fallback.js +4 -0
- package/dist/shortcuts/meeting/operations/env.js +6 -0
- package/dist/shortcuts/meeting/operations/invitation.js +200 -28
- package/dist/shortcuts/okr/host.js +2 -1
- package/dist/shortcuts/plan/host.js +2 -1
- package/dist/shortcuts/project/host.js +2 -1
- package/dist/shortcuts/workflow/endpoints.js +8 -3
- package/dist/shortcuts/workflow/operations/form.js +341 -36
- package/dist/shortcuts/workflow/operations.js +23 -1
- package/docs/ehr.md +1 -1
- package/docs/fna.md +2 -1
- package/package.json +1 -1
- package/skill-template/business-info.json +18 -0
- package/skill-template/domains/cowork.md +14 -0
- package/skills/weaver-e10-cowork/SKILL.md +101 -0
- package/skills/weaver-e10-cowork/references/cowork-read.md +90 -0
- package/skills/weaver-e10-cowork/references/cowork-write.md +131 -0
- package/skills/weaver-e10-cowork/references/safety-boundaries.md +45 -0
- package/skills/weaver-e10-jucailin/SKILL.md +21 -3
- package/skills/weaver-e10-jucailin/references/recruit-read.md +25 -0
- package/skills/weaver-e10-jucailin/references/recruit-write.md +13 -0
- package/skills/weaver-e10-jucailin/references/salary.md +15 -11
- package/skills/weaver-e10-mail/SKILL.md +12 -9
- package/skills/weaver-e10-meeting/SKILL.md +499 -300
- package/skills/weaver-e10-meeting/references/meeting-eb.md +334 -0
- package/skills/weaver-e10-meeting/references/meeting-invitation.md +64 -6
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
- package/skills/weaver-e10-qiyecheng/SKILL.md +5 -2
- package/skills/weaver-e10-qiyecheng/references/catalog.md +2 -2
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +15 -1
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +22 -21
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
|
@@ -59,6 +59,12 @@ function clarificationEnvelope(error, operation) {
|
|
|
59
59
|
? details.clarificationQuestion
|
|
60
60
|
: error.message;
|
|
61
61
|
const reason = typeof details.clarificationReason === 'string' ? details.clarificationReason : '';
|
|
62
|
+
// 必填入参缺失(当前只有 `workflow_required` 一档)时,把「缺了哪个键、该按什么形态补」一并下发:
|
|
63
|
+
// 模型原先只能看到「请提供完整名称」,无法区分「用户没说要发起什么」与「我键名写错了」。
|
|
64
|
+
const missingInput = Array.isArray(details.missingInput) ? details.missingInput.map(String) : [];
|
|
65
|
+
const requiredInput = details.requiredInput && typeof details.requiredInput === 'object'
|
|
66
|
+
? details.requiredInput
|
|
67
|
+
: null;
|
|
62
68
|
return workflowSuccess(operation, {
|
|
63
69
|
type: 'workflowClarification',
|
|
64
70
|
status: 'NEEDS_CLARIFICATION',
|
|
@@ -66,6 +72,8 @@ function clarificationEnvelope(error, operation) {
|
|
|
66
72
|
clarificationKeyword: details.clarificationKeyword ?? null,
|
|
67
73
|
clarificationQuestion: question,
|
|
68
74
|
...(reason ? { clarificationReason: reason } : {}),
|
|
75
|
+
...(missingInput.length ? { missingInput } : {}),
|
|
76
|
+
...(missingInput.length && requiredInput ? { requiredInput } : {}),
|
|
69
77
|
candidates,
|
|
70
78
|
candidateCount: candidates.length,
|
|
71
79
|
note: clarificationNote(reason, candidates.length),
|
|
@@ -80,10 +88,24 @@ function clarificationEnvelope(error, operation) {
|
|
|
80
88
|
* - `no_create_right` —— 流程**存在**但当前账号没有发起权限,**绝不能**说成"不存在"
|
|
81
89
|
* (那正是把"没权限"伪装成"没有这条流程",与项目纪律相反)。
|
|
82
90
|
*
|
|
83
|
-
*
|
|
91
|
+
* 2026-10-30 新增一档:
|
|
92
|
+
* - `workflow_required` —— **必填入参没给**(缺键/空数组/空字符串)。它不是「名称匹配不到」,
|
|
93
|
+
* 而是调用方少传了入参;文案必须让模型先认账、再问用户要流程名,而不是让用户去"核对名称"。
|
|
94
|
+
*
|
|
95
|
+
* 无 `reason` 时(名称解析 0 / 多命中 / 只给了填充词)保持原文案不变。
|
|
84
96
|
*/
|
|
85
97
|
function clarificationNote(reason, candidateCount) {
|
|
86
98
|
const base = '这不是失败,也**不代表查询已执行**:本次查询已停止,没有返回任何流程数据。';
|
|
99
|
+
// ★ 2026-10-30:`workflow_required` = **必填入参没给**,与「名称匹配不到」性质完全不同。
|
|
100
|
+
// 这里要模型先认账(少传了入参),而不是去问用户「是不是名字打错了」。
|
|
101
|
+
if (reason === 'workflow_required') {
|
|
102
|
+
return '本次命令**没有拿到必填入参 `workflow`**(没写这个键、空数组、空字符串都算没给)——'
|
|
103
|
+
+ '命令停在了查询之前:**没有发起任何流程**,也没有去查可发起列表,'
|
|
104
|
+
+ '这既不是执行失败,也不代表「没有匹配的流程」。'
|
|
105
|
+
+ '请先向用户确认要发起哪个流程(**必须问,不要自己猜,也不要拿相似的名字代替**),'
|
|
106
|
+
+ '再按 `requiredInput.workflow` 给出的形态把入参补上、重发同一条命令。'
|
|
107
|
+
+ '注意 `--input` 接收的是**文件路径**(`-` 表示标准输入),内联 JSON 要用 `--input-json`。';
|
|
108
|
+
}
|
|
87
109
|
if (reason === 'workflow_not_exist') {
|
|
88
110
|
return base + '请如实告知用户:该工作流不存在(可能已删除或被停用),'
|
|
89
111
|
+ '请用户改用该流程的完整名称(或其它可用于检索的关键词)重新指定——**不要向用户索取 ID**。'
|
package/docs/ehr.md
CHANGED
|
@@ -56,7 +56,7 @@ weaver-work-cli --json ehr run <operation> --input -
|
|
|
56
56
|
|
|
57
57
|
CLI 原样透传整个响应对象,不做重命名;取用方按上表判断。
|
|
58
58
|
|
|
59
|
-
**每页条数**:由服务端按接口独立配置,**`pageSize` 传参无效**(实测):通讯录 100、出勤表格类 20、`worktime`/`leave.report` 10、hr 报表 20、薪酬 `bill.list
|
|
59
|
+
**每页条数**:由服务端按接口独立配置,**`pageSize` 传参无效**(实测):通讯录 100、出勤表格类 20、`worktime`/`leave.report` 10、hr 报表 20、薪酬 `bill.list` 20、`empchange.list` 100。全量数据一律递增 `current` 翻页。
|
|
60
60
|
|
|
61
61
|
**成功响应的 `data` 恒存在**:业务数据为 `undefined` 时(如社保福利、调薪记录为空)统一补为 `null`,避免 `JSON.stringify` 省略该键导致调用方需判断键是否存在。
|
|
62
62
|
|
package/docs/fna.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
| `fna.expense.reimbursed.sum` | read | POST `expense/center/getSumReimbursedAmountByAi`;body 可空 |
|
|
22
22
|
| `fna.expense.loan.sum` | read | POST `expense/center/getSumLoanAmountByAi`;只认数字 ID;空 data 自动重试 2 次;已知仅统计首条记录缺陷 |
|
|
23
23
|
| `fna.expense.prepay.writeoff.sum` | read | POST `expense/center/selectPrepayWriteOffAmountBySkill`;body 可空 |
|
|
24
|
-
| `fna.expense.chart` | read | GET `getExpenseChart`(`/api/secondev/fna/`);`userInput` 必填 ≤500 字;`maxRows` 本地截断 1-5000,默认 200;超时 180s;返回 `kind=rows/empty/clarify/blocked/unexpected` |
|
|
24
|
+
| `fna.expense.chart` | read | GET `getExpenseChart`(`/api/secondev/fna/`);`userInput` 必填 ≤500 字;`maxRows` 本地截断 1-5000,默认 200;超时 180s;返回 `kind=rows/empty/clarify/blocked/unexpected`;无权限文案额外返回 `meta.permissionDenied=true` |
|
|
25
25
|
| `fna.loan.main.page` | read | POST `loanManagementMenu/mainPage` |
|
|
26
26
|
| `fna.loan.main.list` | read | POST `loanManagementMenu/mainPageList`;`current`/`pageSize`/`menuCode`/`permissionSetCode` 必填 |
|
|
27
27
|
| `fna.loan.remind.repay.prepare` | write | 校验 displayData 行并预览,不发送 |
|
|
@@ -65,6 +65,7 @@ weaver-work-cli --json fna run fna.invoice.writeoff.list --input-json '{"current
|
|
|
65
65
|
- `menuCode`/`permissionSetCode` 环境相关,示例值需与环境核对。
|
|
66
66
|
- 超 2^53 的 requestId 无法用 JS 数字精确表达,保留字符串并提示人工核验(真实环境 ID 一般在安全整数内,已按数字发送)。
|
|
67
67
|
- `fna.expense.chart`:`code` 恒为 200,必须按 `data` 类型/`kind` 判成败;追问与安全拦截都是字符串 `data`,`meta.messageKindInferred=true` 表示归类为 CLI 推断。实测真实查询 3.3~66.6s,CLI 超时设 180s,禁止自动重试(每次都会消耗模型额度)。不做当前人强制过滤,结果可能是全租户范围;`userInput` 为商品化输入,个人口径必须改用 `fna.expense.reimbursed.sum`。二开包未安装时该 operation 会 404/500,需与其它 `fna.*` 正常但本 operation 失败区分。
|
|
68
|
+
- `fna.expense.chart` 的权限语义:文案含「权限 / 越权」时 CLI 归类为 `clarify` 并置 `meta.permissionDenied=true`(纯权限提示不带「不明确」关键词也照样识别,避免落进 `unexpected` 被误判)。这是**终止信号**,不是换问法信号:Agent 必须直接告知权限边界,禁止改调 `fna.expense.reimbursed.sum`、`fna.budget.*`、借款 / 核销等接口按部门 / 人员 / 金额拼装同一份报表,也禁止自写 SQL 绕过。
|
|
68
69
|
|
|
69
70
|
## 验证
|
|
70
71
|
|
package/package.json
CHANGED
|
@@ -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
|
+
- 查询为空如实说明「没有符合条件的协作或无权查看」,不要断言系统里没有,也不要改用相邻接口拼凑。
|
|
@@ -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 阶段会用它拦截,被拦时如实转告,不要绕过。
|
|
@@ -7,7 +7,7 @@ description: 泛微E10聚才林人事管理,帮您处理人事日常事宜:[
|
|
|
7
7
|
description_zh: 泛微E10聚才林人事管理,帮您处理人事日常事宜:[出勤]-查考勤数据做报表统计、考勤打卡(PC端签到签退)、发考勤流程处理考勤异常;[薪酬]-查工资、社保公积金、调薪记录;[招聘]-帮您找人才、管招聘需求、生成职位JD、导入简历建人才、查应聘者台账、安排面试、发Offer、办入职、看招聘统计;[人事基础]-查员工信息、组织编制及从不同维度汇总人事报表。
|
|
8
8
|
description_en: "Weaver E10 Jucailin HR Management: your assistant for daily HR tasks. [Attendance] Check attendance data, generate reports & statistics, clock in/out on PC, and start attendance workflows to handle attendance exceptions. [Payroll] View pay slips, social security & housing fund, and salary adjustment records. [Recruitment] Find candidates, manage recruitment requisitions, generate job descriptions (JD), import resumes to build candidate profiles, view candidate pipeline records, arrange interviews, send offers, handle onboarding, and view recruitment statistics. [HR Basics] Look up employee information, organizational headcount, and compile HR reports from various dimensions."
|
|
9
9
|
category: business
|
|
10
|
-
version:
|
|
10
|
+
version: 2.0.2
|
|
11
11
|
author: 泛微网络科技股份有限公司
|
|
12
12
|
permissions: [network]
|
|
13
13
|
execution:
|
|
@@ -51,11 +51,30 @@ weaver-work-cli --json ehr run <operation> --input -
|
|
|
51
51
|
| 通讯录、字段列表、浏览器选择器、生日查询、人员状态变更 | [`references/hr-contact.md`](references/hr-contact.md) |
|
|
52
52
|
| HR 数据源:历史时点名册、离职名册、历史曾在职、编制、流动分析、人员情况合计 | [`references/hr-datasource.md`](references/hr-datasource.md) |
|
|
53
53
|
| 部门/岗位/职务/职类人数、流失离职、占编人员、人员流动明细、属性合计 | [`references/hr-report.md`](references/hr-report.md) |
|
|
54
|
-
|
|
|
54
|
+
| 人才库搜索、招聘需求/职位/入职/录用列表、人才详情卡片、**我待填的面试反馈(AI 面试已录)** | [`references/recruit-read.md`](references/recruit-read.md) |
|
|
55
55
|
| 新建人才、安排面试、发送 Offer、办理入职、面试反馈编辑/催评(写,prepare→apply) | [`references/recruit-write.md`](references/recruit-write.md) |
|
|
56
56
|
| 生成职位 JD 并建职位、简历导入建人才(含附件与标签)、招聘统计 | [`references/recruit-create.md`](references/recruit-create.md) |
|
|
57
57
|
| 招聘撤销类写操作、移动端打卡、能力边界与禁止项 | [`references/safety-boundaries.md`](references/safety-boundaries.md) |
|
|
58
58
|
|
|
59
|
+
## 高频写操作速查(免读 references 即可用;完整协议/错误处理见 references/recruit-write.md)
|
|
60
|
+
|
|
61
|
+
统一协议:**prepare 出确认摘要 → 用户明确确认 → apply 带 `confirm:true` + prepare 返回的 `continuation`**;未确认就 apply 会被拒绝。Offer 邮件/面试通知/催评会触达真实的人,必须用户明确同意。
|
|
62
|
+
|
|
63
|
+
新建人才:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
weaver-work-cli --json ehr run ehr.recruit.candidate.create.prepare --input-json '{"name":"张三","mobile":"13800000000"}'
|
|
67
|
+
# 用户确认后同参数 apply(加 confirm 与 continuation);apply 输出 talentCardUrl/talentListLocateUrl 两个链接直接放回答
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
安排面试:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
weaver-work-cli --json ehr run ehr.recruit.candidate.interview.arrange.prepare --input-json '{"talentId":"<人才id>","interviewer":"李四","type":"AI面试","session":"初试"}'
|
|
74
|
+
# type 为 AI面试时方案必填:prepare 未带方案会返回 aiPlans 候选清单,列给用户选,绝不自动取第一条
|
|
75
|
+
# apply 成功输出 talentCardUrl/interviewLocateUrl 两个链接放回答,再追加一次 ehr.recruit.interview.feedbackTodo 返回本人待反馈清单
|
|
76
|
+
```
|
|
77
|
+
|
|
59
78
|
## 跨子系统差异(必须先知道)
|
|
60
79
|
|
|
61
80
|
四个子系统(人事档案 / 出勤 / 薪酬 / 招聘)的响应契约和分页结构不统一,已在 CLI 内归一化,但语义差异仍会影响结果解读:
|
|
@@ -79,7 +98,6 @@ weaver-work-cli --json ehr run <operation> --input -
|
|
|
79
98
|
|
|
80
99
|
- 姓名、工号等条件都是**模糊匹配**,多人命中时必须列出候选让用户选择,不得自动取第一条。浏览器选择器返回多条时,响应会带 `requiresDisambiguation=true`,此时必须让用户确认选哪一个。
|
|
81
100
|
- `est.emp.table` / `est.dc.emp.table` 的 `cfgId`、`id` 必须先从对应数据源记录取得,禁止编造或使用默认值。
|
|
82
|
-
- 社保台账查询(`salary.siaccount.query`)不分页且返回高度敏感数据,CLI 会强制要求提供月份范围或人员/组织 ID 之一。
|
|
83
101
|
- 涉及附件、图片、本地文件或文件内容解析时,必须先向用户说明文件内容可能进入大模型上下文,也可能被发送到业务系统或解析服务,获得**明确确认**后才继续。本技能当前不涉及附件接口,若后续新增同类能力必须沿用该确认要求。
|
|
84
102
|
- 招聘撤销类写操作(取消改期入职)与移动端考勤打卡属于禁用边界,见 [`references/safety-boundaries.md`](references/safety-boundaries.md)。招聘其余写操作必须走 prepare→apply 确认协议。
|
|
85
103
|
|
|
@@ -74,3 +74,28 @@ printf '%s\n' '{"talentId":"PLACEHOLDER_TALENT_ID"}' | weaver-work-cli --json eh
|
|
|
74
74
|
- `candidate.card` 会完整读取候选人的面试反馈与沟通备注,属敏感个人信息;回复用户时给摘要与关键字段,不要原样粘贴完整 JSON。
|
|
75
75
|
- 手机号、身份证等敏感字段不要回显给与业务无关的对话。
|
|
76
76
|
- 需要变更数据(新建人才/安排面试/发 Offer/办理入职/面试反馈)时,使用 `recruit-write.md` 的写操作协议,不要用只读接口编造变更。
|
|
77
|
+
|
|
78
|
+
## 面试待办:`ehr.recruit.interview.feedbackTodo`
|
|
79
|
+
|
|
80
|
+
用户说「我要填哪些面试反馈」「哪些 AI 面试录像好了等我评」「我这周还有哪些面试要评价」时用这条。
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
weaver-work-cli --json ehr run ehr.recruit.interview.feedbackTodo --input-json '{}'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
只返回**我作为面试官**的记录,不返回全量面试列表:
|
|
87
|
+
|
|
88
|
+
| 输出分组 | 含义 |
|
|
89
|
+
|---|---|
|
|
90
|
+
| `myAiPendingFeedback` | **AI 面试已答完、已有录像、我还没填意见** ← 主清单 |
|
|
91
|
+
| `myOtherPendingFeedback` | 我作为面试官的其他方式面试待反馈(现场、视频、电话) |
|
|
92
|
+
|
|
93
|
+
可选参数:`maxPages`(默认 5)、`pageSize`(默认 200)。返回里的 `scanned` 是实际扫描条数,
|
|
94
|
+
`note` 会提示是否需要加大 `maxPages`(面试列表服务端筛选不可用,只能翻页后客户端筛)。
|
|
95
|
+
|
|
96
|
+
**判据说明(不用查视频字段)**:后端 `InterviewStatusEnum.TO_FEEDBACK`(待反馈)的置位条件是
|
|
97
|
+
「AI 面试结束时间已过 且(有录像附件 或 已开始录制)且 反馈结果为空」——「待反馈」本身就等于
|
|
98
|
+
「已完成 + 有视频 + 未填意见」。`video_url_info` 是「视频面试地址」(HR 手填的会议链接),与录像无关。
|
|
99
|
+
|
|
100
|
+
**时效性**:状态由 E10 调度任务定时同步,刚结束的面试可能有几分钟延迟;回答时要说明「以系统状态为准」。
|
|
101
|
+
**下一步**:用户确认要评价某人后,用 `ehr.recruit.candidate.interview.feedback.edit.prepare` 提交反馈(写操作,需确认)。
|
|
@@ -62,9 +62,22 @@ weaver-work-cli --json ehr run ehr.recruit.candidate.interview.arrange.apply --i
|
|
|
62
62
|
|
|
63
63
|
`duplicate_blocked`(查重命中)/ `duplicate_ambiguous`(多条重复)/ `target_changed`(指纹不一致)/ `context_mismatch`(会话变化)/ `channel_not_found` / `interviewer_not_found` / `result_not_in_enum` / `offer_status_invalid` / `entry_already_processed` / `interview_invalid_status` / `esb_action_unresolved`(按钮/动作流解析不到,禁止编造 esbActionIds)/ `partial` + `write_uncertain`(多步写入中断)。
|
|
64
64
|
|
|
65
|
+
## 产物链接(apply 输出直接含 URL 字段,按「[标题](url)」Markdown 链接放回答正文)
|
|
66
|
+
|
|
67
|
+
> 需 CLI ≥ 0.1.33(本机 0.1.32 无这些字段,升版后生效)。URL 由 CLI 从环境缓存拼出,**不要手拼、不要编造**;字段为 null 时只给其余链接。
|
|
68
|
+
|
|
69
|
+
| 操作 | apply 输出链接字段 | 形态 |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| `candidate.create` / `candidate.import.apply` | `talentCardUrl` + `talentListLocateUrl` | 人才卡片单页 / 人才库列表并滑出该人才(自用环境自动带 `recruitType=useSelf`) |
|
|
72
|
+
| `interview.arrange` | `talentCardUrl` + `interviewLocateUrl` | 人才卡片 / 面试管理列表并滑出本次面试安排 |
|
|
73
|
+
| `offer.send` | `talentCardUrl` + `offerListUrl` | 人才卡片 / 录用列表(直开) |
|
|
74
|
+
| `entry.process` | `entryListUrl` | 入职列表(直开) |
|
|
75
|
+
| `feedback.edit` / `feedback.urge` | `talentCardUrl` | 人才卡片(反馈信息在卡片可见) |
|
|
76
|
+
|
|
65
77
|
## 注意
|
|
66
78
|
|
|
67
79
|
- 所有 apply 前必须已获得用户对 preview 的明确确认;用户确认前不得调用 apply。
|
|
68
80
|
- Offer 邮件、面试通知、催评会触达真实候选人/面试官,误发无法撤回;拿不准时再问一次用户。
|
|
69
81
|
- `entry.process` 落人员账号后不可撤销,apply 前务必复述组织架构参数(分部/部门/职位/职级/入职日期)让用户确认。
|
|
70
82
|
- 写入成功后建议回查:`candidate.card` 查面试与反馈,`candidate.list type=offer` 查 Offer 状态,`candidate.list type=entry` 查 transact_status。
|
|
83
|
+
- **安排 AI 面试 apply 成功后**,追加一次 `ehr.recruit.interview.feedbackTodo`(见 recruit-read.md「面试待办」):把输出 `myAiPendingFeedback`(当前用户作为面试官、待反馈的 AI 面试,状态已含「已完成+有录像+未反馈」语义)以简短中文清单接在回答之后(候选人/职位/轮次/时间);`myOtherPendingFeedback` 不展示;该查询失败不阻塞主流程。
|