weaver-work-cli 0.1.22 → 0.1.24
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 +23 -2
- package/dist/internal/e10/auth/commands.js +194 -16
- package/dist/internal/e10/auth/xiaoe.js +15 -6
- package/dist/internal/e10/context.js +3 -3
- package/dist/internal/e10/request-runtime.js +46 -4
- package/dist/shortcuts/caizhilian/file-upload/metadata.js +124 -0
- package/dist/shortcuts/caizhilian/file-upload/multipart.js +47 -0
- package/dist/shortcuts/caizhilian/file-upload/protocol.js +116 -0
- package/dist/shortcuts/caizhilian/file-upload/receipt.js +37 -0
- package/dist/shortcuts/caizhilian/host.js +13 -5
- package/dist/shortcuts/caizhilian/operations/handlers/file-upload.js +72 -179
- package/dist/shortcuts/caizhilian/operations/handlers/folder.js +701 -4
- package/dist/shortcuts/caizhilian/operations/registry.js +5 -1
- package/dist/shortcuts/caizhilian/operations/specs.js +52 -0
- package/dist/shortcuts/meeting/operations/change.js +7 -4
- package/dist/shortcuts/meeting/operations/create.js +5 -3
- package/dist/shortcuts/meeting/operations/eb/decision.js +22 -2
- package/dist/shortcuts/meeting/operations/lifecycle.js +8 -6
- package/dist/shortcuts/meeting/operations/receipts.js +54 -21
- package/dist/shortcuts/meeting/operations/shared.js +28 -0
- package/dist/shortcuts/meeting/operations/signs.js +14 -4
- package/dist/shortcuts/project/operations/read.js +7 -6
- package/dist/shortcuts/workflow/continuation.js +14 -9
- package/dist/shortcuts/workflow/endpoints.js +11 -1
- package/dist/shortcuts/workflow/operations/flow-status.js +63 -0
- package/dist/shortcuts/workflow/operations/form.js +650 -518
- package/dist/shortcuts/workflow/operations/read.js +374 -13
- package/dist/shortcuts/workflow/operations/shared.js +3 -0
- package/dist/shortcuts/workflow/operations/write.js +5 -5
- package/dist/shortcuts/workflow/operations.js +8 -6
- package/docs/caizhilian.md +8 -2
- package/docs/e10-auth.md +18 -3
- package/package.json +1 -1
- package/skills/weaver-e10-caizhilian/SKILL.md +8 -3
- package/skills/weaver-e10-caizhilian/references/file-upload.md +100 -295
- package/skills/weaver-e10-caizhilian/references/folder.md +31 -3
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +536 -25
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +9 -1
- package/skills/weaver-e10-meeting/SKILL.md +3 -2
- package/skills/weaver-e10-meeting/references/meeting-eb.md +10 -0
- package/skills/weaver-e10-meeting/references/meeting-receipts-signs.md +7 -2
- package/skills/weaver-e10-meeting/references/meeting-verification.md +1 -1
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-shared/SKILL.md +12 -2
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +21 -3
- package/skills/weaver-e10-shijingran/SKILL.md +68 -3
- package/skills/weaver-e10-shijingran/references/disabled-capabilities.md +22 -0
- package/skills/weaver-e10-shijingran/references/source-manifest.json +12 -4
- package/skills/weaver-e10-workflow/SKILL.md +10 -8
- package/skills/weaver-e10-workflow/references/source-manifest.json +36 -31
- package/skills/weaver-e10-workflow/references/workflow-batch.md +2 -4
- package/skills/weaver-e10-workflow/references/workflow-create.md +58 -36
- package/skills/weaver-e10-workflow/references/workflow-edit.md +2 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +2 -2
- package/skills/weaver-e10-workflow/references/workflow-operate.md +2 -1
- package/skills/weaver-e10-workflow/references/workflow-query.md +9 -7
- package/skills/weaver-e10-workflow/references/workflow-share.md +2 -0
|
@@ -5,7 +5,7 @@ display_name_en: Weaver Jiuchuanhui Marketing Management
|
|
|
5
5
|
description: "泛微 E10 九氚汇营销管理:客户、联系人、商机、线索的创建、查询、搜索、修改、转移、公海、联系计划、联系记录、商机推进、线索转客户等 CRM 操作。用户表达营销/CRM 相关业务意图时使用。"
|
|
6
6
|
description_zh: "泛微 E10 九氚汇营销管理。覆盖客户、联系人、商机、线索全生命周期:创建、查询、搜索、修改、转移、公海领取/释放、查重、联系计划、联系记录、商机赢单/输单/无效/暂停/重启、线索转客户,并通过 prepare/apply 确认链处理全部高风险写操作。"
|
|
7
7
|
description_en: "Full-lifecycle CRM operations for customers, contacts, opportunities and clues in Weaver E10 Jiuchuanhui marketing management, including confirmed writes for create, update, transfer, pool claim/release, stage changes and clue-to-customer conversion."
|
|
8
|
-
version: 1.0
|
|
8
|
+
version: 2.1.0
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
@@ -29,6 +29,14 @@ cliHelp: "weaver-work-cli jiuchuanhui --help"
|
|
|
29
29
|
|
|
30
30
|
登录与会话由 `weaver-e10-shared` 共享规则和 `weaver-work-cli auth ...` 命令体系统一托管。业务 Skill 不自建登录流程,不索取、打印或转存任何凭证。
|
|
31
31
|
|
|
32
|
+
调用 E10 接口时,请求头三件套由 `weaver-work-cli` 统一注入,业务调用方不得覆盖,也不得在业务 JSON 中传入凭证类字段:
|
|
33
|
+
|
|
34
|
+
| 请求头 | 取值 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `Cookie` | `<e10-login / CLI 提供的完整原始 Cookie 串>`(禁止裁剪、去重、改写) |
|
|
37
|
+
| `eteamsid` | `<e10-login 返回的 ETEAMSID>` |
|
|
38
|
+
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` |
|
|
39
|
+
|
|
32
40
|
|
|
33
41
|
## 启动与缓存(MUST)
|
|
34
42
|
|
|
@@ -5,7 +5,7 @@ display_name_en: Weaver E10 Meeting Management
|
|
|
5
5
|
description: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动做会议室与参会人冲突检测),会议改期/换地点/改参会人、取消、删除;[会议室]-查询会议室与占用/空闲情况;[参会与回执]-查参会人名单、填写/更新会议回执;[签到]-查签到与签退情况、补签、补签退、清除签到记录;[会议资料]-会议议题(查看/更新/删除)、议题类型、会议纪要查询、会议类型与应用设置、会议决议发布与决议任务跟踪。认证与会话由 weaver-e10-shared 提供。"
|
|
6
6
|
description_zh: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动做会议室与参会人冲突检测),会议改期/换地点/改参会人、取消、删除;[会议室]-查询会议室与占用/空闲情况;[参会与回执]-查参会人名单、填写/更新会议回执;[签到]-查签到与签退情况、补签、补签退、清除签到记录;[会议资料]-会议议题(查看/更新/删除)、议题类型、会议纪要查询、会议类型与应用设置、会议决议发布与决议任务跟踪。认证与会话由 weaver-e10-shared 提供。"
|
|
7
7
|
description_en: "Weaver E10 meeting management for daily meeting tasks: [Meetings] query today's / this week's / my meetings and meeting details, book meetings with automatic room & attendee conflict checks, reschedule / change location / change attendees, cancel, delete; [Rooms] query meeting rooms and occupancy / availability; [Attendees & receipts] view attendee lists, fill in / update meeting receipts; [Sign-in] view sign-in / sign-out status, manual sign-in, manual sign-out, clear sign-in records; [Meeting content] meeting agenda (view / update / delete), agenda types, minutes query, meeting types, application settings, meeting decision publishing and decision task tracking. Auth and session are provided by weaver-e10-shared."
|
|
8
|
-
version: 2.
|
|
8
|
+
version: 2.13.0
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
@@ -134,6 +134,7 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
134
134
|
3. `meeting.create.prepare`:自动执行建会路径检查(`onlyFlowCreate=1` 或周期工作流 → 拒绝并提示走流程)与**强制冲突检测**(接口失败视为冲突;`cansub=false` 直接拒绝;`cansub=true` 有冲突描述 → warnings 如实告知并建议换时间/地点,**但不阻止提交**,是否继续由用户决定;CLI 不主动建议忽略冲突)。
|
|
135
135
|
4. 向用户摘要 preview(含 caller/contacter 默认当前用户、周期 `repeatDesc` 自动拼接)。
|
|
136
136
|
5. 用户明确确认 → `meeting.create.apply`(`confirm: true` + continuation,**10 分钟内有效,过期重新 prepare**)。
|
|
137
|
+
**apply 的入参口径(2026-10-08 修正)**:只传 `confirm` + `continuation` 即可 —— 业务字段以 prepare 快照为准(快照就是用户刚确认过的内容);若同时传了业务字段,则必须与快照一致,否则报 `target_changed`(提示重新 prepare),**不会**绕过确认闸门。
|
|
137
138
|
6. 结果回读用 `meeting.list`;会议链接一律用 `meeting.link` 生成(**禁止手工拼 URL**:EB 版 objid 需动态解析,标准版会议室/会议类型没有单页),再按 `[名称](url)` **内联到名称单元格**输出。
|
|
138
139
|
|
|
139
140
|
## 处理链:变更 / 取消 / 删除会议(高风险写,强制确认链)
|
|
@@ -141,7 +142,7 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
141
142
|
1. 先用 `meeting.list`(或用户给出的会议 id)定位目标会议,必要时用 `meeting.link` 生成 `[名称](url)` 给用户核对(EB 环境会议也在 `meeting.eb.meeting.list`)。
|
|
142
143
|
2. `meeting.change.prepare`(变更)/ `meeting.cancel.prepare` / `meeting.delete.prepare`(入参 `id`):CLI 先**回查会议存在性**;`change` 还会按会议状态自动决定 `operateType`(草稿=UPDATE、正常=CHANGE)。**权限判定交给服务端**,CLI 不做权限预判。成功返回 `preview` + `continuation`(10 分钟有效)。
|
|
143
144
|
3. 向用户摘要动作与后果(变更=覆盖所提交字段、当前状态与分流类型;取消=会议进入取消状态、占用/回执/签到失效;删除=**移入回收站**、不再出现在正常列表),**取得明确确认**。变更只提交 preview 中列出的字段。
|
|
144
|
-
4. 用户确认 → `meeting.*.apply`(`confirm: true` + continuation
|
|
145
|
+
4. 用户确认 → `meeting.*.apply`(`confirm: true` + continuation;**只传这两个参数即可**,业务字段取 prepare 快照;改动内容会报 `target_changed`)。
|
|
145
146
|
5. 结果回读:`meeting.list` 确认状态(取消/删除后该会议不应再出现在正常列表)。
|
|
146
147
|
6. **禁止**跳过 prepare 直接 apply;**禁止**在未确认目标存在时执行写操作。
|
|
147
148
|
|
|
@@ -43,6 +43,11 @@
|
|
|
43
43
|
| **决议任务** | `meeting.eb.decisionTask.list` | `meeting.eb.decisionTask.update` | query_mt_decision_task_list(+count) / update_mt_decision_task |
|
|
44
44
|
| **补签(语义化)** | — | `meeting.eb.sign.mark` | update_meeting_sign_info(自动定位签到记录 id)|
|
|
45
45
|
|
|
46
|
+
> ⚠️ **补签务必带时间(或让 CLI 补当前时间)**:2026-10-08 真机实测,只传 `mt_id` + `user_id` 时 update 里没有任何
|
|
47
|
+
> 时间字段,**服务端照样返回成功、CLI 也报 COMPLETE,但签到记录一点没变**(静默无效)。现 CLI 已兜底:
|
|
48
|
+
> 未传 `sign_time` / `signback_time` / `sign_out_status` 时按"补签"语义**自动补当前时间**(带秒)并写入 `warnings`,
|
|
49
|
+
> 实际写入值在 `preview.after` 里可见;要指定时间请显式传 `sign_time`(`yyyy-MM-dd HH:mm:ss`,带秒)。
|
|
50
|
+
|
|
46
51
|
## 常用命令
|
|
47
52
|
|
|
48
53
|
Windows PowerShell:
|
|
@@ -137,7 +142,12 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-jso
|
|
|
137
142
|
- 决议可能已写入但**没返回 `dataIds`** → 抛 `partial`,提示先用 `decision.list(mt_id)` 回查,**同样不要重复创建**。
|
|
138
143
|
6. **任务与进度的读法(真机实测口径)**:
|
|
139
144
|
- **一条决议明细 = 一个任务**;明细里写多个执行人 ⇒ 该任务**多人共同跟进**(实测:1 明细 + 2 执行人 → 只生成 1 个任务)。
|
|
145
|
+
- ⚠️ **2026-10-08 复测出现「1 明细 + 1 执行人 → 生成 2 条任务」**:任务条数由**用户配置的 ESB 联动**决定,
|
|
146
|
+
可能随模板/配置变化,**不要用「明细条数 = 任务数」推算**,一律以 `decisionTask.list` 的实际返回为准。
|
|
140
147
|
- **更新**用 `meeting.eb.decisionTask.update`:按 `executor` 写 `detail1`(`finish_status` 未完成/已完成/已延期 + `finish_date` **带秒**)。
|
|
148
|
+
- ⚠️ **`markDecided` 的必填组合(2026-10-08 实测)**:`is_decision=2`(决议提交完成)时**必须同时传 `decision_Id` 与 `mt_status`**,
|
|
149
|
+
否则 `prepare` 能通过、`apply` 被服务端拒绝:原文 `DataError:存为未填写的必填字段: decision_Id,mt_status ,请确认`。
|
|
150
|
+
正确样例:`{"id":"<会议id>","decision_Id":"<决议概述id>","is_decision":"2","mt_status":"8"}`(回读会议:`mt_status=结束`)。
|
|
141
151
|
**`finish_date` 是服务端必填**;把任务改回「未完成」时传一个**空格**即可显式清空。
|
|
142
152
|
**同一执行人重复更新 = 覆盖该人记录,不同执行人 = 追加**(实测两人跟进后 detail1 保留两条,互不覆盖)。
|
|
143
153
|
- ★ **读进度直接用 `decisionTask.list` 返回的 `data.progress`**(不必自己解析 detail1):
|
|
@@ -9,8 +9,13 @@
|
|
|
9
9
|
### 回执
|
|
10
10
|
|
|
11
11
|
- 回执更新**必须传回执记录主键 `id`**(不是 `memberId`);`prepare` 会自动按 `memberId` 回查定位。
|
|
12
|
+
- ⚠️ **`memberId` 字段语义(2026-10-08 真机实测,两个环境一致)**:`meeting.receipt.list` 返回的一条回执里,
|
|
13
|
+
**`memberId` 是「姓名」、`memberIdId` 才是「人员 id」**。因此 `receipt.update.prepare` 的 `memberId`
|
|
14
|
+
**两种写法都接受**(人员 id 或姓名);CLI 会按 `memberIdId` / `memberId` 依次匹配,并在写请求 body 里统一带上**解析后的人员 id**。
|
|
15
|
+
列表输出的原始字段保持原样(`memberId`=姓名、`memberIdId`=人员 id),**不要**把 `memberId` 当成 id 使用。
|
|
12
16
|
- `attendStatus` 枚举:`0`=未填写、`1`=参加、`2`=不参加(回执"否/请假"传 2)。
|
|
13
|
-
- 回执列表接口必须带 `isMobile`(CLI 缺省 `false
|
|
17
|
+
- 回执列表接口必须带 `isMobile`(CLI 缺省 `false`)**与 `memberType`(CLI 缺省 `1`)**:2026-10-08 真机实测
|
|
18
|
+
**不传 `memberType` 必报 500「系统内部错误」**(此前只挡住了 `isMobile`),两者均已由 CLI 托管,调用方无需显式传。
|
|
14
19
|
|
|
15
20
|
### 签到
|
|
16
21
|
|
|
@@ -30,7 +35,7 @@ Windows PowerShell:
|
|
|
30
35
|
weaver-work-cli --json meeting run meeting.receipt.list --input-json '{"mtId":"1305624900858404950"}'
|
|
31
36
|
weaver-work-cli --json meeting run meeting.receipt.update.prepare --input-json '{"mtId":"1305624900858404950","memberId":"101","attendStatus":2,"remark":"请假"}'
|
|
32
37
|
# 用户确认后:
|
|
33
|
-
weaver-work-cli --json meeting run meeting.receipt.update.apply --input-json '{"confirm":true,"continuation":"<prepare返回的continuation>"
|
|
38
|
+
weaver-work-cli --json meeting run meeting.receipt.update.apply --input-json '{"confirm":true,"continuation":"<prepare返回的continuation>"}'
|
|
34
39
|
weaver-work-cli --json meeting run meeting.sign.list --input-json '{"mtId":"1305624900858404950"}'
|
|
35
40
|
# 补签(id 取 sign.list 里的 signs[].id):
|
|
36
41
|
weaver-work-cli --json meeting run meeting.sign.mark.prepare --input-json '{"id":"1305624900858404951"}'
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
| `R-DETAIL` | `ok=true` 且 `data` 非空;id 不存在时必须报 `not_found`(**不是**返回空对象) |
|
|
35
35
|
| `R-COUNT` | `withCount:true` 时 `total` 存在;count 与 list 允许不一致时以 `max(total, count)` 为准 |
|
|
36
36
|
| `W-PREP` | `status=AWAITING_CONFIRMATION`,含 `preview`(path/body)+ `continuation`;EB 的 update/delete `preview.path` **必带 `?id=<主键>`** |
|
|
37
|
-
| `W-APPLY` | `status=COMPLETE`;随后按"回读"
|
|
37
|
+
| `W-APPLY` | `status=COMPLETE`;随后按"回读"列核对。**入参口径:只传 `confirm`+`continuation` 即可**(业务字段取 prepare 快照);若同时传业务字段,必须与快照一致,否则 `target_changed` |
|
|
38
38
|
| `W-FAIL-SAFE` | 缺必填 → `missing_required_field`;未确认 → `confirmation.required`;主键缺失 → 服务端原文报错(不得静默成功) |
|
|
39
39
|
| `W-CLEAN` | 用删除类 operation 清理自建数据;EB 清理首选 `meeting.eb.meeting.delete`(级联回收占用/回执/签到) |
|
|
40
40
|
|
|
Binary file
|
|
@@ -39,7 +39,13 @@ requires:
|
|
|
39
39
|
|
|
40
40
|
## 最高优先级:XiaoE 统一登录
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
只有**当前智能体身份明确是 XiaoE** 时才允许走 XiaoE 统一登录。判定依据只能是宿主/任务上下文明确标识 XiaoE,或当前命令进程由 XiaoE 按次注入了成对的平台凭据。不得把以下任一情况当成 XiaoE 宿主证据:
|
|
43
|
+
|
|
44
|
+
- 本机存在 `xiaoeUserData/tokens.py` 或 XiaoE 客户端目录;
|
|
45
|
+
- 环境中只有 `XIAOE_SKILL_*`、`WEAVER_XIAOE_*` 配置或历史兼容变量;
|
|
46
|
+
- 过去在同一台机器上登录或安装过 XiaoE。
|
|
47
|
+
|
|
48
|
+
WorkBuddy、Codex 及其他智能体一律使用 `weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"` 走浏览器 OAuth。`auth login` / `auth oidc` 不会读取或消费 XiaoE 凭据。
|
|
43
49
|
|
|
44
50
|
### XiaoE 凭据由 CLI 独占处理(顶层强规则)
|
|
45
51
|
|
|
@@ -49,6 +55,8 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
49
55
|
- 执行 `weaver-work-cli auth export-weaver-env` 并 `eval` / `Invoke-Expression` 到当前 shell,或把 `WEAVER_*` 值写进命令、日志、报告;
|
|
50
56
|
- 要求用户粘贴、或在回复中展示、转述任何凭证。
|
|
51
57
|
|
|
58
|
+
下述 `auth xiaoe` 流程仅适用于上述已确认的 XiaoE 智能体环境;其他智能体不执行宿主脚本检测,直接进入浏览器 OAuth 流程。
|
|
59
|
+
|
|
52
60
|
需要登录态时只运行 `weaver-work-cli auth xiaoe`(业务命令也会自动尝试)。CLI 内部按「平台凭证 Node 换票 → CLI 自带 `xiaoe_env.py` 兼容换票 → 宿主 `tokens.py` → 桌面 XiaoE 客户端会话 → `WEAVER_XIAOE_*` 环境映射」顺序取凭据;其中 `XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址,不是 E10 地址。`xiaoe_env.py` 属于 CLI npm 包,不放入 shared Skill,且只能由 CLI 内部执行和解析。失败时 CLI 返回结构化错误,Agent 不要替它执行脚本、安装 Python 依赖、手工取 Token 或自动引导用户在本地终端重复登录。
|
|
53
61
|
|
|
54
62
|
1. 未登录、登录失效、准备执行业务命令前需要确认 E10 会话,或 `auth status --no-check` 显示未登录时,先运行:
|
|
@@ -61,6 +69,8 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
61
69
|
5. XiaoE 统一登录走不通时,CLI 必须反馈未拿到登录信息的原因。Web/Linux 环境的 `auth xiaoe` 返回 `authentication/xiaoe_web_credential_unavailable`,不会自动打开 localhost 浏览器 OAuth;macOS/Windows 桌面宿主才允许自动降级。用户明确要求网页登录、且 CLI 与浏览器同机时,再显式运行 `weaver-work-cli auth login`。
|
|
62
70
|
6. `auth status --no-check` 只是本地诊断,不会主动触发 XiaoE 统一登录;业务命令和 `auth xiaoe` 才会尝试写入统一登录态。具体读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
63
71
|
|
|
72
|
+
`auth login` / `auth oidc` 是严格的浏览器 OAuth 入口,即使同一台机器上存在 XiaoE 凭据或客户端文件,也不得先尝试 XiaoE 统一登录。未显式指定 `--auth` / `--profile` 的业务命令也只能在当前进程身份明确为 XiaoE 时自动尝试统一登录。
|
|
73
|
+
|
|
64
74
|
### 浏览器 OAuth 防挂起(顶层强规则)
|
|
65
75
|
|
|
66
76
|
`auth login`(以及 macOS/Windows 桌面宿主上的 `auth xiaoe` 降级)会在本机 `127.0.0.1:19800` 监听浏览器回调,最长等待 5 分钟。在 Agent 沙箱/托管环境中,外部浏览器无法回调容器内 `127.0.0.1:19800`,因此:
|
|
@@ -142,7 +152,7 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
142
152
|
| 强触发条件 | Reference |
|
|
143
153
|
| --- | --- |
|
|
144
154
|
| 命令不可用、Agent 自动安装 CLI、安装、构建、全局 link、检查可用 skill | [`weaver-e10-installation.md`](references/weaver-e10-installation.md) |
|
|
145
|
-
| 登录、profile、E10 会话、baseUrl、auth 文件、`WEAVER_*` / `XIAOE_*`
|
|
155
|
+
| 登录、profile、E10 会话、baseUrl、auth 文件、`WEAVER_*` / `XIAOE_*` 环境变量;**未登录或登录失效(仅 XiaoE 智能体环境先自动尝试,其它场景需要用户提供登录域名)** | [`e10-auth-and-session.md`](references/e10-auth-and-session.md) |
|
|
146
156
|
| 容器/沙箱/CI/无 GUI 环境、无人值守、登录类命令超过 180 秒未结束、出现 `Open browser login` / `Waiting for E10 authorization callback` / `Could not open browser automatically`、显式传域名后仍降级、认证目录 `EACCES` | [`non-interactive-environment.md`](references/non-interactive-environment.md) |
|
|
147
157
|
| 判断 stdout/stderr、JSON envelope、退出码、脚本封装、自动化调用、大结果渲染/分页控量 | [`json-output-contract.md`](references/json-output-contract.md) |
|
|
148
158
|
| 准备执行写入/删除/导入/更新、遇到 `confirmation.required`、`partial.write_uncertain`、网络中断或回查失败 | [`high-risk-write.md`](references/high-risk-write.md) |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## 什么时候读取
|
|
4
4
|
|
|
5
5
|
用户需要登录、切换 profile、诊断 E10 连接、处理登录失效,或任务涉及 `base-url`、auth 文件、Keychain、`WEAVER_*` 环境变量时读取本文件。
|
|
6
|
-
XiaoE
|
|
6
|
+
当当前智能体身份明确为 XiaoE,且认证流程涉及 `XIAOE_*` 环境变量或 `xiaoeUserData/tokens.py` 时也读取本文件。仅本机存在这些变量、文件或 XiaoE 客户端,不能用来判定当前智能体是 XiaoE。
|
|
7
7
|
|
|
8
8
|
## 基本检查
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@ weaver-work-cli auth whoami
|
|
|
20
20
|
|
|
21
21
|
登录态判断只允许通过 `weaver-work-cli auth status --no-check`、`weaver-work-cli auth profile list/current`、`weaver-work-cli doctor --e10` 和业务命令返回的 JSON 错误完成。只有用户明确提供外部 auth 文件路径时,才可按用户要求使用 `--auth <path>` 或 `E10_AUTH_PATH`;不能主动搜索旧认证目录。
|
|
22
22
|
|
|
23
|
-
## 未登录 /
|
|
23
|
+
## 未登录 / 登录失效:仅 XiaoE 智能体自动尝试统一登录
|
|
24
24
|
|
|
25
25
|
业务命令依赖 E10 登录态。出现以下任一情况即判定为未登录或登录失效:
|
|
26
26
|
|
|
@@ -38,10 +38,11 @@ weaver-work-cli auth whoami
|
|
|
38
38
|
|
|
39
39
|
**正确流程(按序执行,缺一不可):**
|
|
40
40
|
|
|
41
|
-
0.
|
|
41
|
+
0. **仅 XiaoE 智能体环境优先自动尝试统一登录**:只有宿主/任务上下文明确标识当前智能体为 XiaoE,或当前命令进程收到 XiaoE 按次注入的成对平台凭据时,才运行:
|
|
42
42
|
```text
|
|
43
43
|
weaver-work-cli auth xiaoe
|
|
44
44
|
```
|
|
45
|
+
本机存在 `xiaoeUserData/tokens.py`、XiaoE 客户端目录、`XIAOE_SKILL_*` 或 `WEAVER_XIAOE_*` 配置都只表示“凭据可能可用”,不表示“当前智能体是 XiaoE”。WorkBuddy、Codex 及其他智能体必须跳过此步,进入下方浏览器 OAuth 流程。
|
|
45
46
|
CLI 会按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile `config.baseUrl` → CLI 内置默认值”解析 E10 登录域名;`XIAOE_DOMAIN` 只作为 XiaoE/erpa 换票服务地址。业务命令在未显式指定 `--auth` / `--profile` 时,也会自动优先尝试这一步。若凭证有效,会直接保存登录态,`agentType` 固定为 `XiaoE`,然后继续原业务操作。若 Web/Linux 返回 `authentication/xiaoe_web_credential_unavailable`,反馈宿主登录态/凭据注入异常后停止,不要自动进入下方浏览器流程,也不要要求用户去本地终端重复登录。Agent 不得因为本地存在旧 profile 就跳过统一登录,也不得要求用户提供或展示 `XIAOE_*` / ETEAMSID。
|
|
46
47
|
|
|
47
48
|
1. **先调用宿主提供的提问 / 弹框能力询问用户**,让用户二选一:
|
|
@@ -78,6 +79,8 @@ weaver-work-cli auth whoami
|
|
|
78
79
|
weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
|
|
79
80
|
```
|
|
80
81
|
|
|
82
|
+
`auth login` / `auth oidc` 是严格的浏览器 OAuth 入口,不会因为本机可发现 XiaoE 凭据、脚本或客户端文件而改走 XiaoE 统一登录。
|
|
83
|
+
|
|
81
84
|
在 XiaoE 宿主环境中,`auth xiaoe` 先使用平台注入的 `XIAOE_USER_TOKEN` + `XIAOE_DOMAIN` 换取 ETEAMSID(沙箱唯一可用来源):先走 Node 主路径,失败后由 CLI npm 包自带的 `scripts/xiaoe_env.py` 作标准库兼容回退;拿不到时再读宿主 `xiaoeUserData/tokens.py` 的 stdout JSON(仅桌面宿主),再退回内置原生实现读取桌面 XiaoE 客户端会话(`XiaoE/Robots/<id>/user_settings.json`,不需要本机 Python);仍未识别到可用凭证时,才读取 `WEAVER_XIAOE_*` 环境变量里的“当前登录域名 -> ETEAMSID”统一登录映射,并且保存的 `agentType` 固定为 `XiaoE`。`XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址,不能作为 E10 地址;E10 目标按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile → CLI 内置默认值”解析。Node 和 Python 兼容路径都校验业务码及 `data.eteamId`,保留系统 CA 校验,只允许同源重定向或同主机 HTTP→HTTPS 升级。统一登录失败时,Web/Linux 返回 `authentication/xiaoe_web_credential_unavailable`,不自动启动 localhost 浏览器 OAuth;macOS/Windows 桌面宿主才允许自动降级。
|
|
82
85
|
|
|
83
86
|
需要显式表达“XiaoE 优先”的场景也可以使用等价入口:
|
|
@@ -96,6 +99,21 @@ weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_ty
|
|
|
96
99
|
|
|
97
100
|
`<当前智能体名称>` 使用发起登录验证的宿主标识,例如 WorkBuddy 传 `workbuddy`,Codex 传 `codex`。CLI 会把该值同时写入 E10 授权 URL 的 `agent_type` 和 `from` 参数,其中 `from` 用于授权确认页的客户端名称展示。如果宿主无法确认名称,才允许省略 `--agent_type`;CLI 会尝试从 `WEAVER_AGENT_TYPE`、`WORKBUDDY_AGENT_TYPE`、`CODEX_AGENT_TYPE` 以及 `WORKBUDDY_*` / `CODEX_*` 环境变量推断,最后回落为 `weaver-work-cli`。
|
|
98
101
|
|
|
102
|
+
授权成功后,本地回调页会为已识别的桌面智能体显示应用打开弹层。CLI 内置 WorkBuddy
|
|
103
|
+
(`workbuddy://`)、智能小 E(`xiaoe-client://`)和 Codex(`codex://`)映射;其他
|
|
104
|
+
智能体在 `agent_type` 本身是合法协议名时,默认按 `<agent_type>://` 唤起。Windows/macOS
|
|
105
|
+
安装包都需要注册对应协议。用户确认后,页面以
|
|
106
|
+
一次性令牌请求本地 CLI,由 CLI 调用系统协议处理器,避免浏览器直接访问自定义协议时
|
|
107
|
+
出现不可定制的 Chrome/Edge 原生确认框;宿主需要返回当前会话等精确位置时,
|
|
108
|
+
可在执行登录命令时增加 `--agent-return-url "<宿主提供的自定义协议 URL>"`,或注入
|
|
109
|
+
`WEAVER_AGENT_RETURN_URL`。客户端协议名与 `agent_type` 不一致时也应使用该覆盖。返回
|
|
110
|
+
地址只接受桌面应用自定义协议;不要传网页、脚本或
|
|
111
|
+
本地文件 URL。“始终打开”偏好保存在当前本地回调地址的浏览器存储中;未识别到返回协议
|
|
112
|
+
时,页面只提示用户手动返回智能体或终端。本地 CLI 打开通道默认保留 15 分钟;通道结束
|
|
113
|
+
后页面会自动退回浏览器自定义协议打开方式,不直接显示网络请求错误。
|
|
114
|
+
智能小 E 统一登录成功时不会经过浏览器;只有统一登录不可用并降级为桌面浏览器 OAuth 时,
|
|
115
|
+
才显示“返回智能小 E”弹层。
|
|
116
|
+
|
|
99
117
|
保底方式是让用户手动写入浏览器中的 `ETEAMSID`:
|
|
100
118
|
|
|
101
119
|
```text
|
|
@@ -5,11 +5,13 @@ display_name: 泛微E10事井然项目管理
|
|
|
5
5
|
display_name_en: Weaver E10 Shijingran Project Management
|
|
6
6
|
description_zh: 泛微E10事井然项目管理助手,封装项目和任务的创建、查询、修改、删除操作,并提供项目/任务类型、紧急程度、状态等字典查询能力。适用于在对话中通过 Agent 创建、查询、修改、删除项目或任务等场景。
|
|
7
7
|
description_en: Weaver E10 Shijingran project management assistant. Covers CRUD operations for projects and tasks, and provides dictionary queries for project/task types, priorities, and statuses. Used when an Agent needs to create, query, modify, or delete projects or tasks in conversation.
|
|
8
|
-
version: 1.0.
|
|
8
|
+
version: 1.0.8
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
12
12
|
bins: ["weaver-work-cli"]
|
|
13
|
+
dependencies:
|
|
14
|
+
- weaver-e10-shared
|
|
13
15
|
cliHelp: "weaver-work-cli project --help"
|
|
14
16
|
---
|
|
15
17
|
|
|
@@ -26,6 +28,28 @@ cliHelp: "weaver-work-cli project --help"
|
|
|
26
28
|
先读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。若共享规则不存在、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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。
|
|
27
29
|
**`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
|
|
28
30
|
|
|
31
|
+
### 登录与请求头凭证契约
|
|
32
|
+
|
|
33
|
+
本 Skill 是 CLI 型技能,不自行发起 HTTP 请求:认证与会话**统一由 `weaver-e10-shared` 共享规则和 `weaver-work-cli auth ...` 命令体系托管**,禁止自建或绕过登录流程。
|
|
34
|
+
|
|
35
|
+
所有 E10 请求由 `weaver-work-cli` 统一注入以下三项请求头,缺一不可(唯一权威声明见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md) 的「请求头契约」章节,本技能只做指针引用,不复制其代码块):
|
|
36
|
+
|
|
37
|
+
| 请求头 | 取值 | 约束 |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| `Cookie` | `weaver-work-cli` 登录后返回的完整原始 Cookie 串 | 必须原样携带,禁止裁剪 / 去重 / 改写 |
|
|
40
|
+
| `eteamsid` | 登录会话对应的 ETEAMSID | 必须原样携带 |
|
|
41
|
+
| `User-Agent` | `AgentType=<agentType>,IsAgent=true` | 必须携带,不得省略 |
|
|
42
|
+
|
|
43
|
+
以上三项均由 CLI 注入,不要手工拼装请求头,也不得把字段写进业务入参。
|
|
44
|
+
|
|
45
|
+
认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
|
|
46
|
+
|
|
47
|
+
Agent 不得自行拼接、改写或向用户索取上述凭证(禁止要求用户贴 Cookie / ETEAMSID / Token),也不得直接 `curl` / `fetch` E10 接口,或把接口原始路径、Cookie、ETEAMSID、Token 当作"用户可执行步骤"写进回复。
|
|
48
|
+
|
|
49
|
+
所有命令通过 `weaver-work-cli --json project run <operation>` 执行:简单 JSON 优先传 `--input-json '<json>'`,复杂或多行 JSON 先写入 UTF-8 文件再传 `--input <path>`,只有确认当前 shell 能稳定传管道时才使用 `--input -`。调用前先按需读取 references 下对应的文件查参数结构,不要猜字段;**references 是第一信息源**,`weaver-work-cli project schema` 是 operation、字段和风险等级的合约来源。
|
|
50
|
+
|
|
51
|
+
命令示例、提示词和临时说明必须同时兼容 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 写法。
|
|
52
|
+
|
|
29
53
|
## 路由
|
|
30
54
|
|
|
31
55
|
命中以下意图时按表路由到对应 operation 和 reference;不要为了普通查询执行 `project schema`、`project.version.check`、`project.form.fields` 或读取非必要 reference。
|
|
@@ -40,6 +64,7 @@ cliHelp: "weaver-work-cli project --help"
|
|
|
40
64
|
| 按姓名解析员工/部门/分部 | `project.employee/department/subcompany.resolve` | [field-resolution.md](references/field-resolution.md) | 多个匹配必须让用户选择 |
|
|
41
65
|
| 版本异常诊断 | `project.version.check` | [operations.md](references/operations.md) | 仅接口异常或用户主动询问 |
|
|
42
66
|
| 创建/修改/删除任务或项目 | `project.task/*`、`project.project/*` 的 prepare/apply | [write-operations.md](references/write-operations.md) | 严格 prepare → apply |
|
|
67
|
+
| 附件上传、字段自动解析、系统状态改写等未暴露能力 | 无可用命令 | [disabled-capabilities.md](references/disabled-capabilities.md) | 如实告知并给替代路径,不要猜 operation |
|
|
43
68
|
|
|
44
69
|
## 高优先级语义
|
|
45
70
|
|
|
@@ -58,6 +83,14 @@ cliHelp: "weaver-work-cli project --help"
|
|
|
58
83
|
5. 写操作先 `prepare`,向用户摘要目标、差异、风险、默认值和不可逆性;用户明确确认后才 `apply`。
|
|
59
84
|
6. `partial/write_uncertain`、登录失效、回查失败或网络中断时停止写流程,不自动重试。
|
|
60
85
|
|
|
86
|
+
## 输出与展示
|
|
87
|
+
|
|
88
|
+
- 列表和详情默认只给摘要:记录数 + 下方固定展示列,不粘贴完整 JSON,不罗列全部原始字段;完整响应过长时先落本地 UTF-8 文件再给摘要与路径。
|
|
89
|
+
- 默认展示列以 [`operations.md`](references/operations.md) 的「输出处理」为准:任务列表 `task_name / task_type / plan_start_time / plan_finish_time / manager / task_status / progress / create_time`;项目列表把 `task_*` 换成 `proj_*`;详情在此基础上补 `project`/`priority` 与描述、创建时间。用户明确指定字段时以用户为准。
|
|
90
|
+
- 记录名称列(`task_name` / `proj_name`)渲染为 Markdown 链接 `[名称](detail_url)`,**不单独输出 `detail_url` 列**;`detail_url_warning` 时名称保持纯文本并如实说明,不得编造 URL。
|
|
91
|
+
- 关联字段(`manager`、`participant(s)`、`task_type`、`proj_status` 等)只展示 `name`,不展示内部 ID;字典 ID、对象 ID、`groupId` 只用于入参。
|
|
92
|
+
- 未指定状态时先说明默认口径「只查未开始 + 进行中」(默认系统状态口径见 [`operations.md`](references/operations.md));返回条数等于 `pageSize` 时提示可能还有下一页。
|
|
93
|
+
|
|
61
94
|
## 执行原则
|
|
62
95
|
|
|
63
96
|
- 业务调用统一使用 `weaver-work-cli --json project run <operation>`,优先 `--input-json`;复杂多行 JSON 用 UTF-8 文件和 `--input <path>`。
|
|
@@ -75,10 +108,42 @@ cliHelp: "weaver-work-cli project --help"
|
|
|
75
108
|
4. 登录失效:按共享规则处理登录,不得使用旧 continuation 直接重试。
|
|
76
109
|
5. 回查失败:向用户说明结果不确定,等待用户决策。
|
|
77
110
|
|
|
111
|
+
## 常用命令示例
|
|
112
|
+
|
|
113
|
+
以下示例只示意参数形态;执行前必须先按 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md) 判定是否补 `--is-connector true`,命中时本任务内每条命令都要带。
|
|
114
|
+
|
|
115
|
+
Windows PowerShell:
|
|
116
|
+
|
|
117
|
+
```powershell
|
|
118
|
+
weaver-work-cli --json project run project.task.list --input-json '{"filters":{"manager":"@me"},"pageNo":1,"pageSize":10,"withDetailUrl":false,"fields":["task_name","task_type","task_status","manager","plan_finish_time","progress"]}'
|
|
119
|
+
weaver-work-cli --json project run project.project.list --input-json '{"pageNo":1,"pageSize":10}'
|
|
120
|
+
weaver-work-cli --json project run project.task.detail --input-json '{"id":"<taskId>"}'
|
|
121
|
+
weaver-work-cli --json project run project.dictionary.task-status --input-json '{"pageNo":1,"pageSize":100}'
|
|
122
|
+
weaver-work-cli --json project run project.task.create.prepare --input-json '{"records":[{"task_name":"需求评审"}]}'
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
macOS/Linux(bash/zsh):
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
weaver-work-cli --json project run project.task.list --input-json '{"filters":{"manager":"@me"},"pageNo":1,"pageSize":10,"withDetailUrl":false,"fields":["task_name","task_type","task_status","manager","plan_finish_time","progress"]}'
|
|
129
|
+
weaver-work-cli --json project run project.project.list --input-json '{"pageNo":1,"pageSize":10}'
|
|
130
|
+
weaver-work-cli --json project run project.task.detail --input-json '{"id":"<taskId>"}'
|
|
131
|
+
weaver-work-cli --json project run project.dictionary.task-status --input-json '{"pageNo":1,"pageSize":100}'
|
|
132
|
+
weaver-work-cli --json project run project.task.create.prepare --input-json '{"records":[{"task_name":"需求评审"}]}'
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
写操作的 `prepare` 返回 continuation 后,必须先向用户摘要再执行 apply:
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{"continuation":"PREPARE_CONTINUATION","confirm":true}
|
|
139
|
+
```
|
|
140
|
+
|
|
78
141
|
## 不在范围
|
|
79
142
|
|
|
80
|
-
- 禁止绕过 `weaver-work-cli` 直接调用 E10
|
|
81
|
-
-
|
|
143
|
+
- 禁止绕过 `weaver-work-cli` 直接调用 E10 原始接口;禁止 `curl` / `fetch` / 浏览器自动化访问 `/api/ebuilder/**`、`/api/ebproject/**` 等路径。
|
|
144
|
+
- 禁止读取或复制 CLI runtime 内部的 Token、Cookie、ETEAMSID;禁止读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
|
|
145
|
+
- 不提供附件上传;`attachment` 只接受已上传文件 ID,且处理文件前必须取得用户敏感数据确认。未暴露能力清单见 [`disabled-capabilities.md`](references/disabled-capabilities.md)。
|
|
82
146
|
- 不自动替用户选择同名人员、组织、项目、任务或字典选项。
|
|
83
147
|
- 不自动翻页、自动扩大 pageSize 或自动聚合全量数据。
|
|
84
148
|
- 不在正常路径预调用版本诊断。
|
|
149
|
+
- 非事井然的 E10 能力(流程审批、组织人员、发票、文书定档案等)不由本 Skill 承载,转对应业务技能。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 事井然未暴露能力
|
|
2
|
+
|
|
3
|
+
## 何时使用
|
|
4
|
+
|
|
5
|
+
用户要求的动作在本 Skill 的 operation 列表里没有对应命令时,先读本文,如实说明「当前 CLI 未提供该能力」,并给出可行的替代路径;**不要猜测 operation 名,不要直接调用 E10 原始接口,也不要用别的 operation 硬凑**。
|
|
6
|
+
|
|
7
|
+
## 当前未纳入 CLI 的能力
|
|
8
|
+
|
|
9
|
+
| 用户诉求 | 现状 | 处理方式 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 给任务/项目上传或替换附件 | `project.attachment.upload` 未暴露。源资料只说明 `attachment` 字段接受**已上传文件 ID**,未提供事井然模块自己的上传接口与文件安全确认链 | 不要把本地文件当作附件直接写入。先告知用户需在 E10 页面完成上传,再提供已上传文件 ID;本 Skill 不代办上传 |
|
|
12
|
+
| 按字段类型自动解析名称到 ID | `project.field.auto-resolve` 未暴露。CLI 只提供分步解析 operation,由 Agent 按字段类型显式编排 | 按 [`field-resolution.md`](field-resolution.md) 分步解析:人员/部门/分部用 `project.employee/department/subcompany.resolve`;项目/任务名称用 `project.project.list` / `project.task.list`;Ebuilder 关联字段用 `project.form.fields` + `project.form.data.page`;字典字段用 `project.dictionary.*` |
|
|
13
|
+
| 修改系统状态 `sys_status` | `sys_status` 是系统维护字段,只能用于查询过滤 | 不接受写入。用户要变更系统状态时,说明需在 E10 页面操作 |
|
|
14
|
+
| 跨表单批量导入 / 批量删除 | 未暴露 | 创建可用 `records` 数组在单次 `create.prepare` 里传 1-100 条;删除只能逐条 `delete.prepare/apply`,不要并发刷接口 |
|
|
15
|
+
| 直接把某个字段的全部选项元数据一次性拉全 | `project.form.options` 可用,但必须先确定 `table` 与 `fieldName` | 按 [`field-resolution.md`](field-resolution.md) 的「Select 与字典字段」先定位字段,再查选项 |
|
|
16
|
+
| 附件内容下载、OCR、文件内容解析 | 未暴露 | 不属于本 Skill;不要用其他模块的接口代替 |
|
|
17
|
+
|
|
18
|
+
## 注意
|
|
19
|
+
|
|
20
|
+
- 未暴露 ≠ 用户不能做:优先给出 E10 页面路径或已支持的分步替代方案,不要为了"完成"而编造 operation、字段或接口路径。
|
|
21
|
+
- 任何写入都必须走 `prepare -> apply` 确认链;不用"能力未暴露"当作跳过用户确认的理由。
|
|
22
|
+
- 与 operation、字段、风险等级有关的最终依据是 `weaver-work-cli project schema`,不是本文;本文只说明缺口与替代路径。
|
|
@@ -1241,7 +1241,7 @@
|
|
|
1241
1241
|
}
|
|
1242
1242
|
},
|
|
1243
1243
|
"artifactBaseline": {
|
|
1244
|
-
"aggregateSha256": "
|
|
1244
|
+
"aggregateSha256": "eb2413bba08ce89d006615d49d08ef5967ba2220d11481e674dafd78680100c8",
|
|
1245
1245
|
"files": [
|
|
1246
1246
|
{
|
|
1247
1247
|
"path": "docs/_catalog.md",
|
|
@@ -1288,8 +1288,8 @@
|
|
|
1288
1288
|
{
|
|
1289
1289
|
"path": "skills/weaver-e10-shijingran/SKILL.md",
|
|
1290
1290
|
"role": "generated-skill-entry",
|
|
1291
|
-
"size":
|
|
1292
|
-
"sha256": "
|
|
1291
|
+
"size": 14475,
|
|
1292
|
+
"sha256": "4d92d0dda6c2f30b7501dcbc2e5d1b9e42b69a22d73b2df8d0c6a61326821154"
|
|
1293
1293
|
},
|
|
1294
1294
|
{
|
|
1295
1295
|
"path": "src/shortcuts/index.ts",
|
|
@@ -1368,6 +1368,12 @@
|
|
|
1368
1368
|
"role": "generated-test",
|
|
1369
1369
|
"size": 15966,
|
|
1370
1370
|
"sha256": "27abe41e8c6819d48c926fc10ebfaee7653defc8672c3634d0e838d42cde7f35"
|
|
1371
|
+
},
|
|
1372
|
+
{
|
|
1373
|
+
"path": "skills/weaver-e10-shijingran/references/disabled-capabilities.md",
|
|
1374
|
+
"role": "generated-reference",
|
|
1375
|
+
"size": 2501,
|
|
1376
|
+
"sha256": "722879e32b17988297f5c7ee9eab2f6df056e9da2a1560b1bdba3507b13d08b1"
|
|
1371
1377
|
}
|
|
1372
1378
|
]
|
|
1373
1379
|
},
|
|
@@ -1375,6 +1381,8 @@
|
|
|
1375
1381
|
"只记录源资料指纹、operation 影响索引和产物指纹,不保存 Cookie、Token、认证信息、真实内网地址、大段源正文或个人主目录路径。",
|
|
1376
1382
|
"source-manifest.json 自身不纳入 artifactBaseline 文件列表,避免自引用指纹无法稳定计算。",
|
|
1377
1383
|
"源资料版本为 1.0.4,覆盖 25 个接口文档、1 个目录文档和 1 个字段解析流程指引。",
|
|
1378
|
-
"project.attachment.upload 与 project.field.auto-resolve 因源资料缺少安全实现契约而保留为 withheldOperations。"
|
|
1384
|
+
"project.attachment.upload 与 project.field.auto-resolve 因源资料缺少安全实现契约而保留为 withheldOperations。",
|
|
1385
|
+
"2026-09-24:刷新本技能包内产物指纹(SKILL.md / references),新增 references/disabled-capabilities.md;行尾统一为 LF。",
|
|
1386
|
+
"2026-10-08:SKILL.md 的「登录与请求头凭证契约」改为请求头声明表格(Cookie / eteamsid / User-Agent),刷新本包产物指纹。"
|
|
1379
1387
|
]
|
|
1380
1388
|
}
|
|
@@ -43,7 +43,7 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
43
43
|
1. **第一轮就并行发起(关键:不要串行拆成多轮往返)**:在**同一条消息**里同时发出下列调用——
|
|
44
44
|
- Read `../weaver-e10-shared/SKILL.md`(若尚未读过);
|
|
45
45
|
- `weaver-work-cli [--is-connector true] --json workflow run workflow.memoryPrompt`——该命令**无入参**;**先按本文件开头的 `--is-connector` 判据确定前缀,再直接执行**(仅"非首次对话且距上次成功读取记忆不足 6 小时"时跳过);
|
|
46
|
-
- **查询类意图**只读 [`workflow-query.md`](references/workflow-query.md) 一份(已覆盖 `workflow.search` 与 `workflow.todoStat`,不要再读其他查询文档);**但该文件约 108 KB /
|
|
46
|
+
- **查询类意图**只读 [`workflow-query.md`](references/workflow-query.md) 一份(已覆盖 `workflow.search` 与 `workflow.todoStat`,不要再读其他查询文档);**但该文件约 108 KB / 835 行——整读会超单次读取上限被明确拒绝**(Read 单次上限约 **20,000 tokens ≈ 100 KB / 800 行**):**首轮一次读完开头的契约段**(`offset 1 limit 244`,约 30 KB,已覆盖 Operation、全部输入参数含「大分类判定」、时间条件与「待办时间默认语义」、执行流程),其余章节(`planJson` 编排、汇报式分组骨架、渲染规则与示例)**只在需要的那一刻按它开头的「分段索引」给出的行区间补读**;查看/操作/共享/发起/修改等意图读对应那一份 reference 即可,不要顺手把查询文档也一起读;**唯一例外是批量操作**——用 `scopeCondition` 走范围驱动时要构造与 `workflow.search` 同形的查询条件,**这一轮可以同时读 [`workflow-query.md`](references/workflow-query.md) 与 [`workflow-batch.md`](references/workflow-batch.md)**(前者给条件写法,后者给 `scopeCondition`/`action` 的执行口径),其余意图仍只读对应那一份;
|
|
47
47
|
- **泛化待办查询**(如"今天有哪些待办")先看上一步 `memoryPrompt` 返回的 `oaContext.smartGrouping`:`false`(低版本)→ **直接** `workflow.search`(category=todo,**不要带 `planJson`/`subCategory`**),CLI 已自带分组统计与卡片,原样渲染即结束;`true`(智能分组)→ 才追加 `workflow.todoStat` 做统计规划,再带 `planJson` 取数。**不要在 `smartGrouping` 为 `true` 之前先调 `workflow.todoStat`**——低版本必然失败(报 `todo_stat_requires_smart_mode`)白费一次调用。
|
|
48
48
|
> 以上调用**互不依赖,必须并行**:串行拆轮会成倍拉长耗时。**实测基准**:一次泛化待办查询全程约 70s,其中**模型轮次占 ~95%**(每轮约 8~25s,主因是模型输出量),CLI 命令本身合计只有 1~2s。**能省一轮就省一轮**——尤其不要为"解析上一轮输出""取流程 ID"另起一轮。
|
|
49
49
|
- **[`workflow-memory.md`](references/workflow-memory.md) 本步不读**——记忆读取的命令形态见上一行(**含 `--is-connector` 判据**,按它确定前缀后执行),**记忆保存的规则已在本文件「记忆保存(全局规则)」章节给全**(本轮任务结束时按那一节执行);只有需要判断"放 `user.md` / `memory.md` / `workflow:{id}` 哪一类"或其它字段细节时,才在需要的那一刻去读它。
|
|
@@ -57,13 +57,15 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
57
57
|
- **全程中文**;输出时把技术术语翻译成普通用户能看懂的话(命令要求对返回内容原样输出的除外)。
|
|
58
58
|
- **列表/详情最终回复 = 原样粘贴命令返回的渲染文本全文,一字不改**:**`workflow.search` 用 `finalMarkdown`**(卡片列表;`smart` 模式无顶部行)、**`workflow.detail` 用 `renderMarkdown`**(该 operation 没有 `finalMarkdown`)——两者不要混用、不要自己拼装;其中禁止出现 `<div>`/`<span>`/`style` 等 HTML 标签。
|
|
59
59
|
- 只执行本 skill 列出的 operation,把命令返回的结果、提示、候选**原样呈现**;命令没做的、没返回的、查不到的,反馈用户或停止——**绝不自行发明、探测、绕过**。
|
|
60
|
+
- **澄清一律不向用户索取 ID**:凡是"名称没匹配到 / 有多个候选待确认"的情形(填单、查询、转发接收人、共享对象等一律适用),只问该对象的**完整名称**或**其它可用于检索的关键词**;`名称(ID)`(或 `{id,name}` 这类结构)由你按命令返回的 `candidates` 自己拼好、重发同一条命令,**不要让用户提供 ID**。
|
|
60
61
|
- 失败、超时、登录失效、业务错误一律立即停止,不自动重试、不延长等待、不切换地址、不换接口。**例外**:读操作遇登录失效时按 `weaver-e10-shared` 的认证引导处理,认证完成后重放原请求(写操作见「写操作失败处理」)。
|
|
62
|
+
- **接口异常一律原样反馈给用户,禁止自行尝试解决方案**:命令返回里出现接口报错(`error.type = api`)时,把接口提示原文转述给用户、并说明本次操作**没有完成**;不得替接口解释原因,不得自行改用别的做法去绕。
|
|
61
63
|
- **若决策依据了历史记忆,最终回复要说明;若本轮保存了记忆,要说明会记住什么。**
|
|
62
64
|
- **不得写 agent 工具的工作日志/工程日志/对话记录**;**不读取、不处理与本任务无关的工作区引导/身份文件**(如工作区根的引导说明、身份档案等——那是别的流程负责的事,在本轮纠结它只会让任务跑偏并白白多花几秒);不读取命令源码、不执行调试命令、不使用调试参数。
|
|
63
65
|
|
|
64
66
|
## 记忆保存(全局规则,每轮任务结束都要执行)
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
**每轮完整实质任务结束、向用户输出最终回复之前**,必须自行判断本轮是否出现**新的、有价值的语义记忆**(例如用户新澄清/确认了具体工作流、**字段名 / 浏览按钮字段值 / 选项字段的选项值**;与已有记忆重复的不算):
|
|
67
69
|
|
|
68
70
|
- **有** → 组装本轮「用户原始意图 + 澄清过程 + 确认结果」的消息列表,**实际调用** `weaver-work-cli [--is-connector true] --json workflow run workflow.memoryExtract --input-json '{"msgList":[{"msgRole":"user","msgValue":"…"},{"msgRole":"assistant","msgValue":"…"}],"async":true}'`(**要不要带 `workflowId` 见下一条**):
|
|
69
71
|
- **`msgList` 每项的字段名固定是 `msgRole` / `msgValue`**(按对话顺序:user 放用户原话/澄清回复,assistant 放命令返回/你的确认说明),**不要写成 `role` / `content`**;
|
|
@@ -76,8 +78,8 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
76
78
|
**硬禁令(违反即为没保存)**:
|
|
77
79
|
|
|
78
80
|
- **不允许只在思考里写"应该保存记忆"**:判断"有"后必须**真的发出 `workflow.memoryExtract` 命令**,拿到真实 `saved` 结果后再输出最终回复。只在内心说"要保存"而不执行 = 没保存。
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
+
- **发起流程(`workflow.createForm` / `workflow.createRequest`)按本节更窄的口径**:本轮发起过程中,只有**用户有新的明确澄清**——① 工作流名称;② 字段名称;③ 浏览按钮字段值;④ 选项字段的选项值——才属于要保存的情形(口径见 [`workflow-create.md`](references/workflow-create.md));**这四类之外一律不保存**(用户只是给出普通文本 / 日期 / 金额字段的本次取值、或只是正常走完一次填单,都不算记忆),不要漏也不要多存。
|
|
82
|
+
- 用户澄清后确认的**工作流名称 / 字段名称 / 浏览按钮字段值 / 选项字段的选项值**属于典型的"有价值记忆",**属于要保存的情形**,不要漏。
|
|
81
83
|
- **记忆里的别名条目写「(待确认)」时,它是一张待办、不是终态**:本轮只要把该别名唯一解析出了 `workflowId`(**`cards[].workflowId`** 或 `countDetails[].workflowId` 里就有),任务结束时**必须再保存一次把 ID 补上**(口径同上),不要放着不管。
|
|
82
84
|
|
|
83
85
|
> 本节的规则已足够直接执行;仅当需要判断"放 user.md / memory.md / workflow:{id} 哪一类"或需要其它字段细节时,才去读 [`workflow-memory.md`](references/workflow-memory.md)。
|
|
@@ -125,7 +127,7 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
125
127
|
- **目标是一个范围(没有准确 `requestId`)** → **必须先数条数再执行**:先用 `scopeCondition`(与 `workflow.search` 同形的条件)+ `action:"total"` **只查条数**(`action` 在给了 `scopeCondition` 时**必填**,漏写报 `batch_action_required`),把「范围 + 条数」报给用户确认(`total=0` 但 `scopeTotal>0` 时要说明"有 N 条但不适用本次操作",不能说成没有数据)。
|
|
126
128
|
- **目标是一个范围、用户已确认条数** → 再用同一条 `scopeCondition` 配 `action:"execute"`;**循环由 CLI 内部完成**(查一页→执行→排除已处理/失败的 ID→再查,直到取完或触达上限),**不要自己写"查一页→数 ID→再执行"的多轮流程**。返回里给的是成功/失败条数、失败清单与 `stoppedReason`(**不含批次数等内部细节**),照它汇报即可——`scope_not_batch_eligible` 表示"范围内有数据但本次操作一条都取不到"(**不是**"没有数据"),要说明原因并给替代操作(如改 `workflow.batchRead`)。
|
|
127
129
|
- 单条共享 -> `workflow.sharePrepare` -> 用户确认 -> `workflow.shareApply`。
|
|
128
|
-
- 发起流程 -> `workflow.createForm`(传 `workflow
|
|
130
|
+
- 发起流程 -> `workflow.createForm`(传 `workflow`,**目标写法优先用 `名称(ID)`**:自带显式 ID 时不查可发起列表、少一次往返,纯名称才走可发起列表模糊匹配;解析可发起的工作流并拿到 `continuation`;返回 `NEEDS_CLARIFICATION` 时按 `candidates` 与用户确认后用 `名称(ID)` 重发)-> 按用户意图填 `data` -> `workflow.createRequest`(`context` 传上一步的 `continuation`,`action` 取 `draft`/`submit`)。**必填是否齐不用模型判断**:`action:"submit"` 缺必填时命令不会创建流程,返回 `NEEDS_INPUT` + `missingFields`,一次问齐后带同一 `context` 重发;`action:"draft"` 则照常建草稿、缺失项只作提醒。
|
|
129
131
|
- 修改表单 -> `workflow.editLoad` 拿 `context` -> `workflow.editPrepare` -> 用户确认 -> `workflow.editApply`。
|
|
130
132
|
|
|
131
133
|
## 执行原则(减少误路由、误重试和无效消耗)
|
|
@@ -169,12 +171,12 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
169
171
|
### 5) 命令输出读取纪律(禁止截断、禁止重复取数)
|
|
170
172
|
|
|
171
173
|
- **禁止对命令输出做管道截断**:不要用 `| head`、`| tail`、`| more` 等处理 `weaver-work-cli --json ...` 的 stdout。截断会破坏 JSON,并且必然导致重复执行同一条命令(实测最常见的一条命令被执行 2 次,就是 `| head` 引起的)。
|
|
172
|
-
- **一律直读 stdout(失败时读 stderr,见下条),不要落盘、不要写脚本回读**:`--json` 输出是**多行 pretty JSON**,且已按体积做过控制(`workflow.todoStat` 约 20 KB/400 余行;`workflow.search` 的条目已收窄到必要字段、泛化待办查询实测约 **14 KB**;`workflow.detail` 只有几 KB;`workflow.createForm` / `editLoad`
|
|
174
|
+
- **一律直读 stdout(失败时读 stderr,见下条),不要落盘、不要写脚本回读**:`--json` 输出是**多行 pretty JSON**,且已按体积做过控制(`workflow.todoStat` 约 20 KB/400 余行;`workflow.search` 的条目已收窄到必要字段、泛化待办查询实测约 **14 KB**;`workflow.detail` 只有几 KB;`workflow.createForm` / `editLoad` 遇到大表单会落盘、stdout **只回一条提示**(提示里直接给出可照抄的读命令))——都在宿主单次输出上限以内,每行也都不长——**直接读即可**,不存在行长截断问题。**禁止**把 stdout 重定向到文件(`> /tmp/xxx.json`)再写脚本解析回读:它不会带来任何新信息,只会白白多出一次工具往返(实测多一轮约 +7s,占整轮耗时可观)。
|
|
173
175
|
- **`workflow.search` 的体积纪律(别等被截断)**:泛化待办按要求走 `planJson` 分组(各组独立渲染、各 10 条,体积天然分散);要看更多用 `current` 分页续查;**不要靠加大 `pageSize` 一次拉全**。CLI 侧已按 **24 KB(美化口径)** 设体积守卫:超线时自动把完整结果落盘,并在结果**最前面**给出 `resultFile`(结构化 JSON)+ `resultMdFile`(纯 `finalMarkdown`),**stdout 仍保留全量 `finalMarkdown`** ⇒ 正常渲染**直接用 stdout 即可、不需要读文件**;只有需要完整结构化明细(如逐条 `requestId`)时才从 `resultFile` 按需提取,并一次读完(不要 `| head`/`| tail`)。宿主把输出截成一小段预览时:**不要重跑同一条命令**(结果一样、白烧一轮),改用更小页或 `planJson` 分组重取;宿主提示的落盘副本(`~/.workbuddy/projects/**/tool-results/**`)**不能用 Read 工具读**(会拿 `Permission … has been denied`),确实要用时以 shell 命令读取并只提取需要的字段。
|
|
174
176
|
- **失败出口在 stderr(stdout 为空即失败)**:命令失败时退出码非 0、**错误 JSON 只出现在 stderr**(`{ok:false, error:{type,subtype,message,retryable}}`),**stdout 是空的**。因此:**stdout 为空 → 一律视为失败并去读 stderr**,按 `error.subtype` 决定下一步(如 `todo_stat_requires_smart_mode` → 不要重试 todoStat,改走 `workflow.search`;`plan_requires_smart_mode` → 去掉 `planJson` 重查);判断成败**以 `ok` 字段为准**,宿主界面把命令显示成"运行成功"只代表进程结束,不代表业务成功。
|
|
175
177
|
- **同一个 operation 最多执行一次**:拿到 stdout 后一次性解析完,不要先截断看一眼再重跑。
|
|
176
|
-
- **结果里出现 `resultFile` 时不要重跑命令**:`workflow.search`、`workflow.todoStat`、`workflow.createForm`、`workflow.editLoad` 等大输出 operation 会把完整数据落盘,并在结果**最前面**返回 `resultFile` 与 `largeOutputNotice
|
|
177
|
-
- **`createForm` / `editLoad`
|
|
178
|
+
- **结果里出现 `resultFile` 时不要重跑命令**:`workflow.search`、`workflow.todoStat`、`workflow.createForm`、`workflow.editLoad` 等大输出 operation 会把完整数据落盘,并在结果**最前面**返回 `resultFile` 与 `largeOutputNotice`;`workflow.search` / `workflow.todoStat` 的 stdout 已保留可用内容,被省略的大字段(如查询的逐条明细、某工作流的 `formFields`、通知正文 `formFieldValues` 全文)再**按需提取**(只取要用的键,不要把整份读进上下文);**`createForm` / `editLoad` 则相反——stdout 里已没有任何表单属性,必须照抄提示里的读命令把该文件整份读完**,之后不要再重读。两类都**不要重新执行 operation**。
|
|
179
|
+
- **`createForm` / `editLoad` 大表单超线时只回一条提示**(字段少时就是原样全量):结果里**只有** `resultFile` / `persistedResult` / `outputBytes` / `largeOutputNotice` 四个键,**不带任何表单属性**。`largeOutputNotice` 里直接给出可照抄执行的读命令(文件路径 + `limit` = 该文件总行数),**先照抄它把文件一次读完、再继续下一步**——字段清单、必填、`initialValues` / `historyRequestData`、以及下一步要用的 `contextId` 全在那个文件里。**不要重跑本命令、不要分段读、不要用 `head`/`tail` 截断、也不要用脚本去挖文件。** 只有落盘不可用(极少见)时才返回全量并在 `largeOutputNotice` 里说明。**必填不要自己推演**:OA 的联动(显示属性)规则不下发,一律按 `createRequest` 的 `missingFields` 补齐。
|
|
178
180
|
- **一次解析取全,不要把"判定"与"取 ID"拆成两次**:同一次输出里已有的信息应在同一步一并取出——例如 `countDetails[].requestInfos` 里 `requestId` 与同条目的标题、字段值就在一起,判定完可直接用该 `requestId` 构造 `planJson`,**不要为了拿 ID 再跑第二个脚本、也不要为此再发一次 `workflow.search`**。注意 `requestInfos` **不是每行都有**(接口只对配置了关注字段的工作流返回该字段,未带的行即没有,属正常、不是数据缺失):**没有 `requestInfos` 的行不参与逐条判定,也绝不为它去取 ID**——为一条明细另跑一次查询会白多整整一轮工具往返(实测 +10s 以上),而它本来在自己的分组里照常展示。
|
|
179
181
|
- **用户对已展示结果的更正不重跑**:用户指出上一轮汇报里某条的性质/归属不对(如"重点关注里第一条其实是转发给我的,意见是请知悉")时,这是**呈现层的更正**、底层数据没变——**不要重跑那次 `workflow.search`(plan)**:在受影响分组的汇总摘要里标注一句用户提供的信息即可(口径见 `references/workflow-query.md`「渲染红线」)。**只有用户明确要求"重新出一份 / 挪到某组重出"时才重跑**,且复用上一轮那次的 `planJson`、只改受影响的分组。重跑一次 ≈ **1 轮 + 30~50s**,纯属浪费;用户表述是陈述句、看不出意图时,先问一句再动手。
|
|
180
182
|
|