weaver-work-cli 0.1.32 → 0.1.33
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 +2 -2
- package/dist/chunks/{archive-UMGX72K6.js → archive-FVFY6GZN.js} +2 -2
- package/dist/chunks/{archive-oa-N2IYBLF3.js → archive-oa-NW3OD4UV.js} +2 -2
- package/dist/chunks/{asset-GLEGKFG5.js → asset-7QJKMIDV.js} +2 -2
- package/dist/chunks/{attachment-content-AQNX5N3S.js → attachment-content-OSAVA6K3.js} +3 -2
- package/dist/chunks/{blog-E44OTVDA.js → blog-I7SDPNW4.js} +2 -2
- package/dist/chunks/{caizhilian-DQUFZXZL.js → caizhilian-O37ZIQNY.js} +2 -2
- package/dist/chunks/{calendar-JKPIRKFD.js → calendar-7KXE4ED3.js} +2 -2
- package/dist/chunks/{chunk-4YC43QQ4.js → chunk-2FLWXFVS.js} +4 -4
- package/dist/chunks/{chunk-QWY6PGL6.js → chunk-2LV74IWP.js} +361 -56
- package/dist/chunks/chunk-3SO6QL6U.js +73 -0
- package/dist/chunks/{chunk-DW6AUUKS.js → chunk-6ATGWRZM.js} +6 -4
- package/dist/chunks/chunk-BYATLLEF.js +68 -0
- package/dist/chunks/chunk-BYBSCN4X.js +932 -0
- package/dist/chunks/{chunk-2GA5ZIQL.js → chunk-D223PTXU.js} +1 -0
- package/dist/chunks/{chunk-H7J4DC5R.js → chunk-EEWPQE3O.js} +2 -2
- package/dist/chunks/{chunk-6RKD4DRZ.js → chunk-GFPXQIY2.js} +2 -2
- package/dist/chunks/{chunk-C6R3B2ML.js → chunk-HEL5XTYI.js} +12 -6
- package/dist/chunks/{chunk-CVZ2JOSW.js → chunk-IHUYP6LO.js} +1 -1
- package/dist/chunks/{chunk-YRVDW4WN.js → chunk-ILMBNVSG.js} +2 -2
- package/dist/chunks/{chunk-G3QJULO2.js → chunk-KAS45KNR.js} +1 -1
- package/dist/chunks/{chunk-H6XSTSLM.js → chunk-MEEFGWTM.js} +54 -196
- package/dist/chunks/{chunk-GCG2NMWR.js → chunk-MQ2I5AA3.js} +4 -2
- package/dist/chunks/chunk-NHA62QD7.js +774 -0
- package/dist/chunks/{chunk-WKI2FBIQ.js → chunk-OCU4RLHC.js} +641 -309
- package/dist/chunks/{chunk-WSKBSQ2U.js → chunk-PRHJGPMA.js} +2 -2
- package/dist/chunks/{chunk-6EFWDL7Y.js → chunk-Q6LWB5HX.js} +2 -2
- package/dist/chunks/{chunk-IURUFGZK.js → chunk-RBGOMK4Y.js} +50 -33
- package/dist/chunks/chunk-VBCFFFGT.js +226 -0
- package/dist/chunks/{ebuilder-form-V5FG2EHC.js → chunk-WRRJ4GG2.js} +22 -1148
- package/dist/chunks/{chunk-E4Z23GHM.js → chunk-WY74UBJ6.js} +264 -750
- package/dist/chunks/conflict-SFNEVJY5.js +21 -0
- package/dist/chunks/continuation-RN6PZN2M.js +11 -0
- package/dist/chunks/cowork-CKWYHXYB.js +2508 -0
- package/dist/chunks/ebuilder-form-KOLJRVZD.js +121 -0
- package/dist/chunks/{ehr-HMFY6VIL.js → ehr-WFOC3B4D.js} +1174 -20
- package/dist/chunks/{esb-ZYSVB7SG.js → esb-LJZTN663.js} +4 -4
- package/dist/chunks/{fna-B7RKPAZD.js → fna-F7QRIIZC.js} +2 -2
- package/dist/chunks/{host-45WED2KK.js → host-BCGUVEWX.js} +3 -3
- package/dist/chunks/host-BQBRHVR3.js +23 -0
- package/dist/chunks/{host-I4Z6BFYX.js → host-DGE2TZD4.js} +3 -3
- package/dist/chunks/{host-KNZ52LJZ.js → host-KXPTEWFS.js} +3 -3
- package/dist/chunks/{host-OCH2BCCV.js → host-VQ6JJXGQ.js} +3 -3
- package/dist/chunks/{hrm-2KAZGUHI.js → hrm-NI6XAKW5.js} +3 -3
- package/dist/chunks/{im-ACJJWH4U.js → im-7TRTF3KT.js} +88 -12
- package/dist/chunks/{invoice-ZK3WCX2U.js → invoice-AOXWJKYT.js} +3 -3
- package/dist/chunks/{jiuchuanhui-5PQD3IL2.js → jiuchuanhui-7NQWEZAW.js} +2 -2
- package/dist/chunks/{lazy-dispatch-JQXBW3GM.js → lazy-dispatch-RNS4EE4S.js} +4 -4
- package/dist/chunks/{mail-S2HDDXO2.js → mail-VDHJAB4O.js} +3 -3
- package/dist/chunks/{meeting-QVN3I37L.js → meeting-GA7XCNNP.js} +214 -43
- package/dist/chunks/{okr-QNG4VC2Q.js → okr-TQIRERPQ.js} +2 -2
- package/dist/chunks/operations-5QL3AECO.js +11 -0
- package/dist/chunks/{plan-A25EMW6U.js → plan-4RY4LN2P.js} +2 -2
- package/dist/chunks/{project-G6XV66DZ.js → project-D6XT2OC5.js} +2 -2
- package/dist/chunks/{registry-DC6KR3NH.js → registry-JHRIDQ3A.js} +4 -4
- package/dist/chunks/{registry-2VLUAESA.js → registry-OZSMDVPP.js} +2 -2
- package/dist/chunks/{registry-TI3CIUXF.js → registry-QKMI43Q6.js} +8 -6
- package/dist/chunks/{registry-7C5UMIPL.js → registry-VOGKFFTR.js} +2 -2
- package/dist/chunks/{room-recommend-WRTHO6Y2.js → room-recommend-D4EUOOWY.js} +4 -3
- package/dist/chunks/{schedule-KFIITGSK.js → schedule-XPFBHPCV.js} +4 -3
- package/dist/chunks/{workflow-DJ7SYWAF.js → workflow-HLBZRWIY.js} +172 -6
- package/dist/index.js +30 -25
- package/dist/internal/e10/auth-recovery.js +14 -4
- package/dist/shortcuts/contract/host.js +34 -59
- package/dist/shortcuts/cowork/continuation.js +70 -0
- package/dist/shortcuts/cowork/errors.js +59 -0
- package/dist/shortcuts/cowork/host.js +172 -0
- package/dist/shortcuts/cowork/index.js +166 -0
- package/dist/shortcuts/cowork/manifest.js +65 -0
- package/dist/shortcuts/cowork/operations/discuss-write.js +277 -0
- package/dist/shortcuts/cowork/operations/item-write.js +380 -0
- package/dist/shortcuts/cowork/operations/member-write.js +283 -0
- package/dist/shortcuts/cowork/operations/permission-write.js +286 -0
- package/dist/shortcuts/cowork/operations/read.js +423 -0
- package/dist/shortcuts/cowork/operations/registry.js +39 -0
- package/dist/shortcuts/cowork/operations/review-write.js +157 -0
- package/dist/shortcuts/cowork/operations/shared.js +215 -0
- package/dist/shortcuts/cowork/operations/types.js +24 -0
- package/dist/shortcuts/cowork/operations.js +19 -0
- package/dist/shortcuts/ehr/host.js +4 -1
- package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +757 -0
- package/dist/shortcuts/ehr/operations/recruit-position.js +367 -0
- package/dist/shortcuts/ehr/operations/recruit-stats.js +133 -0
- package/dist/shortcuts/ehr/operations/recruit-write.js +8 -16
- package/dist/shortcuts/ehr/operations/recruit.js +35 -10
- package/dist/shortcuts/ehr/operations/registry.js +6 -0
- package/dist/shortcuts/im/diagnostics.js +97 -0
- package/dist/shortcuts/im/host.js +58 -31
- package/dist/shortcuts/im/index.js +7 -2
- package/dist/shortcuts/im/operations/at-mention.js +127 -0
- package/dist/shortcuts/im/operations/file-user.js +10 -2
- package/dist/shortcuts/im/operations/group-read.js +26 -5
- package/dist/shortcuts/im/operations/group-write.js +35 -28
- package/dist/shortcuts/im/operations/msg-sync.js +7 -2
- package/dist/shortcuts/im/operations/msg-write.js +76 -10
- package/dist/shortcuts/im/operations/quote-mention.js +119 -0
- package/dist/shortcuts/im/operations/session.js +1 -1
- package/dist/shortcuts/im/operations/shared.js +10 -0
- package/dist/shortcuts/im/operations/types.js +13 -0
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/mail/host.js +4 -1
- package/dist/shortcuts/meeting/host.js +27 -34
- package/dist/shortcuts/meeting/operations/create.js +4 -1
- package/dist/shortcuts/meeting/operations/eb/catalog.js +5 -0
- package/dist/shortcuts/meeting/operations/eb/conflict.js +78 -7
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +168 -26
- package/dist/shortcuts/meeting/operations/eb/factory.js +69 -1
- package/dist/shortcuts/meeting/operations/eb/index.js +16 -3
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +14 -3
- package/dist/shortcuts/meeting/operations/eb-fallback.js +159 -0
- package/dist/shortcuts/meeting/operations/env.js +93 -46
- package/dist/shortcuts/meeting/operations/form-fields.js +110 -0
- package/dist/shortcuts/meeting/operations/registry.js +2 -0
- package/dist/shortcuts/meeting/operations/standard-guard.js +71 -0
- package/dist/shortcuts/meeting/operations.js +16 -0
- package/dist/shortcuts/workflow/index.js +110 -1
- package/dist/shortcuts/workflow/operations/form.js +24 -3
- package/dist/shortcuts/workflow/operations/read.js +104 -23
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupRules.js +448 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupStore.js +106 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/businessRules.js +47 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +30 -23
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +1 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +1 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +2 -1
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +2 -4
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +138 -181
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +12 -7
- package/docs/e10-auth.md +1 -1
- package/docs/im.md +8 -1
- package/docs/todo-smart-convert/README.md +1 -1
- package/docs/todo-smart-convert/data-contract.md +2 -2
- package/docs/todo-smart-convert/subgroup-rules.md +6 -0
- package/package.json +1 -1
- package/skill-template/domains/yimiaoban.md +3 -3
- package/skill-template/skill-template.md +1 -1
- package/skills/weaver-e10-blog/SKILL.md +5 -5
- package/skills/weaver-e10-caizhilian/SKILL.md +5 -5
- package/skills/weaver-e10-calendar/SKILL.md +5 -5
- package/skills/weaver-e10-esb/SKILL.md +5 -5
- package/skills/weaver-e10-hrm/SKILL.md +5 -5
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -2
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -5
- package/skills/weaver-e10-jucailin/SKILL.md +18 -12
- package/skills/weaver-e10-jucailin/references/recruit-create.md +104 -0
- package/skills/weaver-e10-mail/SKILL.md +5 -5
- package/skills/weaver-e10-meeting/SKILL.md +171 -25
- package/skills/weaver-e10-meeting/references/meeting-eb.md +4 -3
- package/skills/weaver-e10-meeting/references/meeting-queries.md +9 -6
- package/skills/weaver-e10-meeting/references/meeting-verification.md +8 -6
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-okr/SKILL.md +5 -5
- package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
- package/skills/weaver-e10-plan/SKILL.md +5 -5
- package/skills/weaver-e10-shared/SKILL.md +12 -12
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +4 -4
- package/skills/weaver-e10-wenshuding/SKILL.md +5 -5
- package/skills/weaver-e10-workflow/SKILL.md +29 -5
- package/skills/weaver-e10-workflow/aigroup/default.json +88 -0
- package/skills/weaver-e10-workflow/references/todo-smart-convert.md +66 -14
- package/skills/weaver-e10-workflow/references/workflow-agent-entry.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-query.md +12 -10
- package/skills/weaver-e10-workflow/references/workflow-view.md +2 -2
- package/skills/weaver-e10-workflow/tools/todo-serve.cjs +239 -0
- package/skills/weaver-e10-workflow/{scripts → tools}/todo-summary.cjs +218 -28
- package/skills/weaver-e10-yepiaotong/SKILL.md +10 -8
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +7 -7
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +10 -10
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +40 -37
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -4
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +27 -38
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +4 -4
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +37 -29
- package/skills/weaver-e10-yimiaoban/SKILL.md +156 -33
- package/skills/weaver-e10-yimiaoban/references/ding-write.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/error-codes.md +5 -1
- package/skills/weaver-e10-yimiaoban/references/group-read.md +5 -1
- package/skills/weaver-e10-yimiaoban/references/group-write.md +6 -4
- package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -0
- package/skills/weaver-e10-yimiaoban/references/msg-write.md +34 -2
- package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +5 -2
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +79 -58
- package/skills/weaver-e10-yimiaoban/references/user-remind.md +2 -2
- package/skills/weaver-e10-ziguanjia/SKILL.md +5 -5
|
@@ -5,7 +5,7 @@ display_name_en: Weaver E10 Meeting Management
|
|
|
5
5
|
description: "泛微 E10 会议管理:查会议、预约建会(推荐会议室、查冲突与空闲时段)、改期/改地点/改参会人、取消删除、流程建会、会议室查询与推荐、生成邀请函、读取会议附件、回执签到、纪要与决议任务、参会二维码。详见 description_zh。"
|
|
6
6
|
description_zh: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动推荐会议室、检测参会人会议冲突与日程空闲、冲突时给出当天可选时段),改期/换地点/改参会人、取消、删除;受限环境可走审批流程建会并自动出邀请函;[会议室]-查询会议室与占用,按人数/设备/常用程度智能推荐;[邀请函]-按会议真实数据生成邀请函文档;[资料]-读取会议与议题的附件、抽取文档正文;参会回执、签到与补签、纪要、议题、决议与决议任务;[二维码]-把文本渲染成参会码/签到码图片。认证与会话由 weaver-e10-shared 提供。"
|
|
7
7
|
description_en: "Weaver E10 meeting management: [Meetings] query today/week/my meetings and details, book meetings with automatic room recommendation, attendee conflict and calendar-availability checks (plus same-day alternative slots), reschedule / change room / change attendees, cancel, delete; flow-based booking with automatic invitation when the app only allows workflow creation; [Rooms] occupancy queries and smart recommendation by capacity, equipment and personal usage; [Invitation] generate invitation docx from real meeting data; [Content] list and read meeting/topic attachments and extract document text; receipts, sign-in, minutes, topics, decisions and decision tasks; [QR] render text into attendee/sign-in QR images. Auth and session are provided by weaver-e10-shared."
|
|
8
|
-
version: 2.
|
|
8
|
+
version: 2.21.0
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
@@ -21,7 +21,7 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
21
21
|
**`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
|
|
22
22
|
|
|
23
23
|
凭证边界:所有 E10 调用凭证一律由 `weaver-work-cli` 的登录托管凭据(`auth` 命令/profile 体系)提供,禁止硬编码任何密钥,禁止向用户索取 Cookie、ETEAMSID、Token 或密码。
|
|
24
|
-
|
|
24
|
+
已有 XiaoE 会话返回 `session_expired` 时,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 "<当前智能体名称>"`。显式登录后写操作不得复用旧 continuation,必须重新 prepare 和确认。
|
|
25
25
|
|
|
26
26
|
本 Skill 通过 `weaver-work-cli meeting` 命令调用真实 operation,不绕过 CLI 直接拼接口。
|
|
27
27
|
|
|
@@ -63,10 +63,11 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
63
63
|
## 路由优先级
|
|
64
64
|
|
|
65
65
|
1. 先判断用户意图是否属于会议域:会议、会议室、预约/建会、会议冲突、签到、回执、会议类型、占用视图。
|
|
66
|
-
2. **属于本模块 →
|
|
67
|
-
- `
|
|
68
|
-
- `
|
|
69
|
-
- `
|
|
66
|
+
2. **属于本模块 → 默认直接按 EB 版执行**(`meeting.eb.*`),**不需要先判断环境是 EB 还是标准版**。
|
|
67
|
+
- **EB 是先验默认**:CLI 没有探测结论时一律先假设 EB(此时 `meeting.env.detect` 会返回 `assumed:true`)。直接调 `meeting.eb.*` 即可,不要为了"选对接口"先探测一次。
|
|
68
|
+
- **EB 走不通报 `api/env_fallback` 时才切标准版**:这个错误意味着 CLI 已经**实探过**标准版可用、并把该环境的模式固化成 `standard`(`details.envModeUpdated`)。此时按 `details.standardOperation` 给出的对等 operation 重试即可,**不需要再跑 `meeting.env.detect`**。若 `standardOperation` 为 `null`(`details.standardUnavailable=true`),说明标准版没有这个能力,如实告知用户本环境做不到,**不要用别的接口拼凑**。
|
|
69
|
+
- **用户明确问"当前是 EB 版还是标准版"时才实探**:跑 `meeting.env.detect` 并带 `refresh:true`;`assumed:true` 只是默认假设,**不能当探测结论回答用户**,`ebSmokeFailed`/`ebSmokeError` 也只在实探结果里出现。
|
|
70
|
+
- `env_unavailable` → EB 与标准版冒烟都不通,提示环境会议应用未安装或接口未配置完整,停止。
|
|
70
71
|
3. 不确定字段先跑 `weaver-work-cli meeting schema`。
|
|
71
72
|
4. 不属于本模块(日程、审批流程、组织查询)→ 转对应 Skill(calendar / workflow / hrm)。
|
|
72
73
|
|
|
@@ -84,9 +85,14 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
84
85
|
- 「补签 / 帮他补上签到」→ 先 `meeting.sign.list` 定位记录 → `meeting.sign.mark.prepare` → 确认后 `apply`;「补签退」用 `meeting.sign.back.prepare`。二者会改写签到事实,必须用户明确确认。
|
|
85
86
|
- 「清除签到记录 / 撤销签到」→ `meeting.sign.clear.prepare` → 确认后 `apply`。
|
|
86
87
|
- 「我要签到 / 扫码签到」→ **CLI 不支持**(依赖现场二维码票据 qrticket 与设备 IP),引导用户现场扫码或走 H5 签到;**绝不代签**。
|
|
87
|
-
-
|
|
88
|
+
- **默认就走 EB operations**(见「命令表(EB 版)」),不必先判断环境:今天的会议 → `meeting.eb.meeting.list`(先 count 再 list);建会 → 先读 `meeting.eb.baseSet.get` 判断是否需走流程,再 `meeting.eb.meeting.create.prepare`(**prepare 内部自动执行会议室/参会人冲突检测**:命中禁止提交 → `conflict_rejected` 直接停止;**仅提醒也会拦下来** —— 见下面「建会的四条护栏」,必须让用户拍板,不能自己决定继续);变更/取消 → `meeting.eb.meeting.change.prepare`(取消用 `operate_type=CANCEL`、`mt_status=4`);签到 → `meeting.eb.sign.list`;回执 → `meeting.eb.receipt.list`;纪要 → `meeting.eb.minute.list`;议题 → `meeting.eb.topic.list`;**补签 → `meeting.eb.sign.mark`(走更新,禁止用 `sign.create`)**;**会议决议 → `meeting.eb.decision.publish`(写决议 + 自动把会议标为已决议,一步到位,勿拆成两步)**;决议任务 → `meeting.eb.decisionTask.list` / `.update`;**改决议 → `meeting.eb.decision.update`**(改明细默认是追加,整组替换传 `detail1Mode:"cover"`)。
|
|
88
89
|
|
|
89
|
-
##
|
|
90
|
+
## 命令表(标准版:EB 降级后 / 显式指定时使用)
|
|
91
|
+
|
|
92
|
+
> ⛔ **默认不要从这张表里挑 operation。** 本 skill 默认走第十一节「命令表(EB 版)」。
|
|
93
|
+
> 只有拿到 `api/env_fallback`(EB 走不通、CLI 已实探标准版可用)或用户明确要求标准版时才用这张表。
|
|
94
|
+
> 环境已确认是 EB 时,这张表里的会议接口会返回 `api/env_mismatch` 并被拒——
|
|
95
|
+
> 因为它们返回的是**另一套数据**(标准版 74 间会议室 vs EB 1 间),拿给用户就是编造。
|
|
90
96
|
|
|
91
97
|
| 用户意图 | CLI operation | Reference |
|
|
92
98
|
| --- | --- | --- |
|
|
@@ -161,19 +167,79 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
161
167
|
| EB 传参口径(人员传 **HRM 员工 id**,非 E10 userId;日期 `yyyy-MM-dd HH:mm`) | — | [meeting-eb.md](references/meeting-eb.md) |
|
|
162
168
|
|
|
163
169
|
> **给验证方(其他智能体)**:需要"验证所有会议功能"时,直接交付 [meeting-verification.md](references/meeting-verification.md)
|
|
164
|
-
> —— 内含全部 **
|
|
170
|
+
> —— 内含全部 **134 个 operation**(标准版 28 + EB 版 91 + 跨模式 15)的逐条判据、写链路模板、15 个负向用例、
|
|
165
171
|
> 8 项不在范围的功能清单,以及可直接粘贴的验证提示词与回执模板。
|
|
166
172
|
|
|
173
|
+
## ⛔ 建会的四条护栏(CLI 会强制拦,调用方不得自己放行)
|
|
174
|
+
|
|
175
|
+
这四条都是真机事故换来的,**任何一条都不允许"我看到 warning 了但还是提交了"**:
|
|
176
|
+
|
|
177
|
+
1. **只允许流程建会时,不许直连建会**
|
|
178
|
+
`only_flow_create=1` / `open_mt_approve=1` → `conflict_rejected`,改走 `meeting.eb.meeting.create.flow`(prepare→apply),不要绕。
|
|
179
|
+
补充两点:应用设置**存在多条记录时管控开关取最严**(任意一条开了就走流程,不是只按最新一条 —— 曾因此被绕过);
|
|
180
|
+
`apply` 会**重新校验一次**闸门,不认 prepare 时 10 分钟前的判定。
|
|
181
|
+
|
|
182
|
+
2. **参会人时间冲突必须让用户拍板**
|
|
183
|
+
即使应用设置只是"提醒"而非"禁止",CLI 也**照样拦下来**(`conflict_rejected`,不返回 continuation),
|
|
184
|
+
并在 `decisions` 里给出 `memberConflicts` 与当天可选时段 `slotOptions`。
|
|
185
|
+
用**选项方式**让用户选:改到候选时段,或明确接受冲突 —— 用户接受后才带 **`conflictAck: true`** 重新提交,这时才真正写入。
|
|
186
|
+
|
|
187
|
+
3. **参会人要传员工 id,不能传姓名**
|
|
188
|
+
传了姓名(`hrm_members: "王丹丹,鲁云聪"`)CLI 会用 HRM 解析成 id 再写入,并在 warnings 里说明换过了。
|
|
189
|
+
**解析不出来的会点名列出**:这几位不参与人员冲突检测,且**回执与签到建不起来**(等于没邀请成功),必须如实告诉用户,不能报"已邀请"。
|
|
190
|
+
|
|
191
|
+
4. **会议室三种情况都要处理,一个都不能省**(2026-10-29 用户明确要求):
|
|
192
|
+
| 情况 | CLI 行为(`create.flow.prepare` / `quick` 内部) | 返回的 `selectionType` |
|
|
193
|
+
|---|---|---|
|
|
194
|
+
| **你指定了会议室** | **照样查它在该时段是否被占用**;被占用就拦下不提交,并给出替代候选 | `room_conflict` |
|
|
195
|
+
| **没指定会议室** | 按人数/常用度/时段占用推荐空闲房间,交用户挑 | `room` |
|
|
196
|
+
| **没指定且推荐不出** | 拦下,给三条出路(指定房间 / 线上会 / 地点待定) | `room_unavailable` |
|
|
197
|
+
- ⛔ **不要因为"用户指定了房间"就跳过冲突检测** —— CLI 两个都做,你也别自作主张只在没指定时才查。
|
|
198
|
+
- 冲突返回里带 `conflicts`(占用明细:哪个会议、几点到几点)+ `options`(按空闲/人数/常用排序的替代房间)。
|
|
199
|
+
正确反应:把"你指定的 X 在 10:00–11:00 已被占用"和候选一起给用户,**不要自己替他换房**。
|
|
200
|
+
- 推荐不出候选时**不得断言"没有会议室"**(见下条),更不能默默提交一个没地点的会。
|
|
201
|
+
- 推荐不出候选 → 返回 `decisions.roomUnavailable`(含原因,如"会议室列表为空/该时段全被占用"),
|
|
202
|
+
必须用选项让用户确认:指定具体房间 / 改为线上会议 / 明确接受"地点待定"。**不要默默建成一场没地点的会**。
|
|
203
|
+
- ⛔ **`meeting.eb.room.list` 返回 0 条 ≠ 这个环境没有会议室**(2026-10-29 真机)。
|
|
204
|
+
EB 会议室台账(`uf_mt_room_base`)里可能明明有数据 —— 按 id 读 `meeting.eb.room.detail` 读得到、
|
|
205
|
+
按 objId 直查有行 —— 但列表接口 `query_meeting_room_list` / `query_meeting_room_count` 读不出来
|
|
206
|
+
(应用侧视图/接口配置问题)。而表单上的「会议地点」是 Ebuilder 浏览按钮,取数来源取决于租户表单配置,
|
|
207
|
+
未必和台账列表同一条链路。
|
|
208
|
+
**所以不得据此断言"无可用会议室"**,正确说法是"会议室列表接口读不到",并给出三条出路:
|
|
209
|
+
① 让用户直接在表单「会议地点」里点选;② 沿用历史单据里的会议室(名称或 id);
|
|
210
|
+
③ 改线上会议(`allowNoRoom: true`)。
|
|
211
|
+
**禁止**改用标准版 `meeting.room.list` 拿另一套会议室顶上(EB 环境会被 `env_mismatch` 拒绝)。
|
|
212
|
+
|
|
167
213
|
## 处理链:预约会议(高风险写,强制确认链)
|
|
168
214
|
|
|
169
|
-
1.
|
|
170
|
-
2.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
215
|
+
1. **直接按 EB 走,不做前置环境判断**:`meeting.eb.meeting.create.prepare` 会**自行读取应用设置**并执行建会路径闸门(`only_flow_create=1` 或 `open_mt_approve=1` → 直接拒绝 `policy/conflict_rejected`,提示改用 `weaver-e10-workflow` 发起流程;读不到应用设置 → `conflict_check_failed`),**调用方不需要、也不得自行判断后继续建会**;只有返回 `env_fallback` 时才改用标准版 `meeting.create.prepare`(见 `details.standardOperation`);`env_unavailable` → 提示并停止。
|
|
216
|
+
2. **流程建会时,流程来源只有一个:应用设置 `mt_new_wf`。**
|
|
217
|
+
- **⛔ 禁止用关键词检索流程**(`workflow.search`、`workflow: "会议"` 这类)。配置里已经给了流程 id,
|
|
218
|
+
检索既无信息增量,又会把无关流程带进来当结论 —— **真实事故(2026-10-29)**:agent 用关键词「会议」
|
|
219
|
+
检索出 11 个候选,「会议室预定流程-北方大区业务运营中心」排第一,用户当场质疑"我们配置的流程不包含这个"。
|
|
220
|
+
配置已给 id 时,任何检索都是错的;只有"用户只说了流程名称、确实没有 id 来源"时才需要澄清。
|
|
221
|
+
- **`mt_new_wf` 是逗号分隔多值时,禁止默认取第一个**。CLI 会逐个探测可发起性,多个可用就返回
|
|
222
|
+
`NEEDS_SELECTION`(`options` 带流程名 + 各流程的字段名清单)→ 原样交给用户选。
|
|
223
|
+
用户说"按上次那张 / 老规矩"时,才去查他的历史发起记录匹配流程名,匹配到就带**单个** `workflowId` 重跑。
|
|
224
|
+
- 取表单一律用 `meeting.eb.meeting.create.flow.prepare`(内部按 `mt_new_wf` 调 `workflow.createForm`),
|
|
225
|
+
**不要**自己拼 `workflow.createRequestDirect` / `workflow.createForm`。
|
|
226
|
+
3. **一次性问全,禁止分轮追问**:名称 / 时间(`yyyy-MM-dd HH:mm`)/ 会议室 / 参会人 / 会议类型。
|
|
227
|
+
缺哪几个就**一次把缺的全部列出来问**,不要"先问时间 → 再问人 → 再问房间"。
|
|
228
|
+
每多一轮追问就多一次模型推理(20–40 秒),用户体感"建个会要 2 分钟"基本都是这么来的(实测 CLI 全程只要 3 秒)。
|
|
229
|
+
用户一句话里已经给全的要素**不要再复述确认**,直接进下一步。
|
|
230
|
+
4. **不要在 prepare 之前自己先去查会议室/类型/冲突** —— `prepare`/`quick` 内部已并行跑完(见上面「会议室不能默默留空」)。
|
|
231
|
+
只有要给用户"换房 / 换时段"时才单独查:EB 走 `meeting.eb.room.recommend` / `meeting.eb.room.list` /
|
|
232
|
+
`meeting.eb.type.list`;只有 `env_fallback` 之后才用标准版 `meeting.room.list` / `meeting.type.list`。
|
|
233
|
+
5. `meeting.eb.meeting.create.prepare`(或 `quick`):自动执行建会路径闸门 + 会议室推荐 + **强制冲突检测**
|
|
234
|
+
(接口失败视为冲突;`cansub=false` 直接拒绝;有冲突描述 → warnings 如实告知并建议换时间/地点,
|
|
235
|
+
**但不阻止提交**,是否继续由用户决定;CLI 不主动建议忽略冲突)。
|
|
236
|
+
6. 向用户摘要 preview(含 caller/contacter 默认当前用户、周期 `repeatDesc` 自动拼接)。
|
|
237
|
+
7. 用户明确确认 → `meeting.eb.meeting.create.apply`(或 `quick` 带 `confirm: true`)。
|
|
238
|
+
**apply 的入参口径**:只传 `confirm` + `continuation` 即可 —— 业务字段以 prepare 快照为准
|
|
239
|
+
(快照就是用户刚确认过的内容);若同时传了业务字段,则必须与快照一致,否则报 `target_changed`
|
|
240
|
+
(提示重新 prepare),**不会**绕过确认闸门。
|
|
241
|
+
8. 结果回读用 `meeting.eb.meeting.list`;会议链接一律用 `meeting.link` 生成(**禁止手工拼 URL**:
|
|
242
|
+
EB 版 objid 需动态解析),再按 `[名称](url)` **内联到名称单元格**输出。
|
|
177
243
|
|
|
178
244
|
## 处理链:变更 / 取消 / 删除会议(高风险写,强制确认链)
|
|
179
245
|
|
|
@@ -186,7 +252,7 @@ cliHelp: "weaver-work-cli meeting --help"
|
|
|
186
252
|
|
|
187
253
|
## 处理链:生成邀请函 docx(只读,不发送)
|
|
188
254
|
|
|
189
|
-
1.
|
|
255
|
+
1. 直接走 `meeting.eb.meeting.list` 单查(**默认就是 EB**,不必先判断);只有返回 `env_fallback`(本环境是标准版)时,邀请函所需的 EB 字段取不到,如实告知用户即可。
|
|
190
256
|
2. 定位会议 id:用户给了会议名 → 先用 `meeting.eb.meeting.list`(`mt_name` 模糊)让用户确认,**不要猜 id**。
|
|
191
257
|
3. 问清「来访客户名称 / 客户单位」,作为 `extra.guest_org` 传入 —— **接口不返回该字段**,不传就会渲染成高亮【待补充】。
|
|
192
258
|
4. 跑 `meeting.invitation.render`,把 `filePath` 与 `pendingFields` 原样告诉用户;有待补充字段时提示"文档里已黄色高亮标出,请补完再发出"。
|
|
@@ -477,6 +543,12 @@ weaver-work-cli --json meeting run meeting.attachment.extract --input-json '{"mt
|
|
|
477
543
|
⛔ 常见现象:"建个会要等很久",**慢的不是 CLI**,是对话里来回:先自己查人、查房间、查冲突、prepare、再确认、再 apply……
|
|
478
544
|
每轮都有模型推理 + 大 JSON 进上下文。所以:
|
|
479
545
|
|
|
546
|
+
- **每次 CLI 调用还有约 1.3 秒固定开销**(node 进程启动,实测 `workflow.createForm` 总耗时 2.2 秒里 1.3 秒是启动)。
|
|
547
|
+
所以**减少调用次数比优化单次更有用**:5 次调用 ≈ 6.5 秒纯启动开销,压到 2 次就省掉 4 秒,
|
|
548
|
+
更重要的是每少一次调用,就少一轮模型推理(20–40 秒)。
|
|
549
|
+
真实对照(2026-10-29 小E 一次建会):**22 次 CLI 调用 / 10 分钟**,而单次 CLI 只要 2 秒 ——
|
|
550
|
+
时间几乎全花在轮次上,且 `meeting-room-list` 被重复调了 3 次、`meeting-room-usage` 3 次。
|
|
551
|
+
|
|
480
552
|
- **建会优先用 `meeting.eb.meeting.create.flow.quick`**(带 `confirm: true`),一次调用拿到 `requestId / meetingId / invitation`;
|
|
481
553
|
人、时间、房间都已经确定、只想快点建出来时加 `enrich: false`(跳过会议室推荐/冲突检测/空闲时段);
|
|
482
554
|
- **不要**在建会前自己先跑 `hrm.employee.query`、`room.list`、`conflict.member`、`schedule.free` —— prepare/quick 内部已经并行做完了
|
|
@@ -510,14 +582,66 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.flow.apply \
|
|
|
510
582
|
- **会议由流程/审批生成**,提交≠建好。`apply` 会在 `waitSeconds`(默认 20s,可传 0~180)内轮询会议表:
|
|
511
583
|
轮询节奏是**立即查一次 → 5 秒后再查一次**,仍未生成就返回 `invitation.pending=true`(不再干等 20 秒); 查到就把 `meetingId` + `invitation.filePath` 一起返回,并在 `timings.pollMs` 里给出耗时;
|
|
512
584
|
「审批通过后再跑一次 `meeting.invitation.render`」——**不要**声称已生成邀请函。
|
|
513
|
-
-
|
|
585
|
+
- **多个建会流程怎么办(强规则)**:应用设置 `mt_new_wf` 可能配多个(如「会议申请流程(NEW)」「会议申请流程」),
|
|
586
|
+
两条流程的**表单字段可能完全不同**(一个设备需求/涉密项目,另一个提醒方式/附件/议题明细/费用承担人)。
|
|
514
587
|
prepare 会**逐个探测当前账号能不能发起**(能载入表单 = 有权限),然后:
|
|
515
588
|
- 只有 1 个可发起 → 直接用;
|
|
516
|
-
- **多个可发起 → 返回 `status: NEEDS_SELECTION` + `options`(W1/W2
|
|
517
|
-
|
|
589
|
+
- **多个可发起 → 返回 `status: NEEDS_SELECTION` + `options`(W1/W2…,带流程名和 `fields` 字段名清单)**,
|
|
590
|
+
**必须把 options 原样交给用户选,禁止自己挑一个**;选定后带**单个** `workflowId` 重新 prepare;
|
|
518
591
|
- 一个都发不起 → 抛 `flow_not_launchable`,把每个流程的失败原因列出来(如 `formId=9 表单不存在`)。
|
|
519
592
|
`probes` 里能看到每个流程的探测结果(`launchable` / `reason`)。
|
|
520
|
-
-
|
|
593
|
+
- **⛔ 不要用「一次传多个 workflowId」来跳过选择**:传 `["A","B"]`、`"A,B"` 都只会得到 `NEEDS_SELECTION`,
|
|
594
|
+
CLI **不会**替你取第一个(2026-10-29 修的就是这个:旧版把数组拼成 `"a,b"` 当单个 id,下游取了第一个能载入的,
|
|
595
|
+
结果字段全填不进另一条流程的表单,用户以为"系统只支持一条")。只有**用户明确点名**某条流程后才传单个 id。
|
|
596
|
+
- **流程 id 的权威链(唯一):入参 `workflowId`(用户已选定)> 应用设置 `mt_new_wf`。**
|
|
597
|
+
- **⛔ 禁止用关键词检索流程**。不要用 `workflow.search`、也不要传 `workflow: "会议"` 去"探明有哪些建会流程"。
|
|
598
|
+
**真实事故(2026-10-29)**:agent 用关键词「会议」检索,返回 11 个候选,
|
|
599
|
+
把「会议室预定流程-北方大区业务运营中心」排在第一并抛给用户,用户当场质疑"我们配置的流程不包含这个"。
|
|
600
|
+
配置里已经给出 id,检索没有任何信息增量,只会引入干扰项。
|
|
601
|
+
(只有"用户只报了流程名称、确实拿不到 id"时才需要澄清,且要用名称精确定位、不要用宽泛关键词。)
|
|
602
|
+
- **默认不要传 `workflowId`**:让 CLI 自己读 `mt_new_wf` 并处理多值(探测 + `NEEDS_SELECTION`)。
|
|
603
|
+
**⛔ 更不要自己先读应用设置、再 split、再挑一个传进去** —— 这正是 2026-10-29 "明明配了 2 个流程却只用 1 个"
|
|
604
|
+
的成因:agent 自行取第一个,CLI 完全无从察觉,也就无法纠正。把选择权留在 CLI/用户手里,不要提前决定。
|
|
605
|
+
- **多值时禁止默认取第一个**:`mt_new_wf` 是逗号分隔多个时,CLI 会逐个探测可发起性,
|
|
606
|
+
多个可用就返回 `NEEDS_SELECTION`。用户说"按上次那张 / 老规矩"时,才去查他的历史发起记录
|
|
607
|
+
(历史单据的流程名,如「会议申请流程-卜伟领-2026-10-15」)匹配出那一条,再带**单个** `workflowId` 重跑。
|
|
608
|
+
- 不要在同一个批量调用里既读应用设置、又跑一次关键词检索 —— 拿到 `mt_new_wf` 就够,
|
|
609
|
+
多跑一次只会多出无关候选,还容易把候选当成配置结论。
|
|
610
|
+
|
|
611
|
+
## 租户自定义字段(表单上后加的字段)
|
|
612
|
+
|
|
613
|
+
租户可以在会议表单上自行加字段(各租户加什么、叫什么都不一样),这些字段**不在接口文档里**,
|
|
614
|
+
也常常不在 CLI 内置字段清单里。处理方式是**运行时发现**:先查真实字段名,再按名写入 ——
|
|
615
|
+
**本 skill 不内置、也不假设任何租户的私有字段名**。
|
|
616
|
+
|
|
617
|
+
1. **查真实字段名**(只读):`meeting.form.fields`
|
|
618
|
+
```bash
|
|
619
|
+
weaver-work-cli --json meeting run meeting.form.fields --input-json '{"type":"meeting","keyword":"<中文名或字段关键字>"}'
|
|
620
|
+
# → dataKey / fieldId / label / compType / multiSelect(该租户这张表上真实存在的字段)
|
|
621
|
+
```
|
|
622
|
+
`type` 可取 meeting / topic / minutes / room / sign / receipt…;`keyword` 按中文名或 dataKey 过滤;
|
|
623
|
+
`data.detailTables` 会列出明细表名。
|
|
624
|
+
2. **写会议表字段**:建会 / 改会传 `extraFields: { "<dataKey>": 值 }`
|
|
625
|
+
```bash
|
|
626
|
+
weaver-work-cli --json meeting run meeting.eb.meeting.change.prepare \
|
|
627
|
+
--input-json '{"id":"<会议id>","operate_type":"UPDATE","extraFields":{"<dataKey>":"<值>"}}'
|
|
628
|
+
```
|
|
629
|
+
3. **写建会流程表单字段**:`meeting.eb.meeting.create.flow.prepare` 传 `extraFields: { "<表单字段名原文>": 值 }`
|
|
630
|
+
—— 流程表单按**该租户表单上的字段名原文**匹配。
|
|
631
|
+
|
|
632
|
+
必须知道的四件事:
|
|
633
|
+
|
|
634
|
+
- **字段名写错会硬报错**,不会静默丢:`DataError:dataKey:xxx,该字段不存在`(真机实测)。
|
|
635
|
+
所以"写不进去"一定是名字不对,拿 `meeting.form.fields` 核对,别改值重试。
|
|
636
|
+
- **`extraFields` 与内置字段同名时以内置字段为准**,并在 warnings 里说明被忽略(不会悄悄盖掉)。
|
|
637
|
+
- **清空**自定义字段靠 `extraFields` 传空串 —— 内置字段的空串会被跳过(防误清),自定义字段走这个口子才清得掉。
|
|
638
|
+
- **组件类型决定值的形态**:`multiSelect=true` 的浏览按钮类字段在页面上是选对象、存 id/对象,
|
|
639
|
+
与流程表单的浏览按钮口径一致(传 `[{id, name}]`)。
|
|
640
|
+
|
|
641
|
+
⚠️ **不要把某个租户的私有字段名写进本 skill**:同一个 skill 包要给所有租户用,
|
|
642
|
+
写死 A 租户的 `dataKey`/`fieldId`,对 B 租户就是错的(`fieldId` 是租户级、甚至环境级的,
|
|
643
|
+
换一套环境同一个字段 id 就变了)。需要固定映射的,放在该租户自己的配置/知识库里,
|
|
644
|
+
skill 里只保留上面这套"先查再写"的机制。
|
|
521
645
|
|
|
522
646
|
## 日程空闲与会议室推荐(新增)
|
|
523
647
|
|
|
@@ -623,24 +747,46 @@ weaver-work-cli --json meeting run meeting.qrcode.render \
|
|
|
623
747
|
|
|
624
748
|
- **会议 id 只用 `meeting.eb.meeting.list` 的 `id`**(或用户直接从 EB 会议详情页复制的 id)。
|
|
625
749
|
- **标准版 `meeting.list` 返回的 id 与 EB 不通用**:拿标准版 id 去调 `meeting.eb.*` 会 `not_found`;反之亦然。两套数据互不相通。
|
|
626
|
-
-
|
|
750
|
+
- 环境模式**默认就是 EB**,直接调 `meeting.eb.*` 即可。只有 EB 返回 `env_fallback`(此时 CLI 已把模式固化成 `standard`)才改用标准版;用户明确问"当前是 EB 还是标准版"时,跑 `meeting.env.detect --refresh` 实探后再答。
|
|
627
751
|
- 用户只说"某个会议"但没给 id 时:**优先用 `meeting.eb.meeting.list` 按名称模糊查**,把候选列给用户确认,**不要**用标准版列表的 id 顶替。
|
|
628
752
|
- 纪要、议题这类"EB 独有"的数据,标准版环境下**没有**,如实说明,不要用标准版接口硬凑。
|
|
629
753
|
|
|
754
|
+
### ⛔ 标准版接口在 EB 环境会直接报 `env_mismatch`(2026-10-29 事故后加的硬闸)
|
|
755
|
+
|
|
756
|
+
有些租户(如 e-cology)**同时装了标准会议应用和 EB 会议应用**,两套数据完全不通:
|
|
757
|
+
|
|
758
|
+
| 接口 | 这个租户返回的东西 |
|
|
759
|
+
|---|---|
|
|
760
|
+
| `meeting.room.list`(标准版) | **74 间**:317会议室(中庭右侧)、342会议室、502茶室、北京会议室… |
|
|
761
|
+
| `meeting.eb.room.list`(EB) | **1 间**:测试会议室1 |
|
|
762
|
+
|
|
763
|
+
agent 一旦误调标准版接口,**它不报错、照常返回数据**,于是把 74 间「用户根本没有的会议室」摆到用户面前
|
|
764
|
+
——用户当场就发现"我没有这些会议室啊"。所以 CLI 现在加了一道闸:
|
|
765
|
+
|
|
766
|
+
- 环境已确认是 EB(`env-mode` 缓存写着 `eb`)→ 调 `meeting.list` / `meeting.room.list` / `meeting.room.usage` /
|
|
767
|
+
`meeting.type.list` / `meeting.receipt.list` / `meeting.sign.list` / `meeting.conflict.*` 等标准版会议接口,
|
|
768
|
+
**直接返回 `api/env_mismatch` 并指出对应的 EB operation**,不会给你数据。
|
|
769
|
+
- 看到 `env_mismatch` 的正确反应:**改用 `details.ebOperation` 指定的 EB 接口**。
|
|
770
|
+
**不要**设 `WEAVER_MEETING_ALLOW_STANDARD_IN_EB=1` 绕过——那只是给排障用的,绕过等于给用户假数据。
|
|
771
|
+
- **EB 接口返回空(0 条)≠ 环境是标准版**:`meeting.eb.room.list` 查到 0 间时,
|
|
772
|
+
可能是环境真没建会议室,也可能是会议应用的会议室列表接口没配好。
|
|
773
|
+
**此时严禁转去调 `meeting.room.list` 拿标准版房间顶上**,如实告诉用户"EB 会议室查不到",
|
|
774
|
+
请管理员检查会议室配置,或让用户直接给会议室名称 / 改线上会议。
|
|
775
|
+
|
|
630
776
|
## 执行原则
|
|
631
777
|
|
|
632
778
|
- 最小必要查询;列表结果默认摘要输出,不粘贴超长 JSON。
|
|
633
779
|
- 长 id(`address`/`mtId`/`hrmMembers` 等)一律字符串传递(超 2^53 数字会失真)。
|
|
634
780
|
- **可点击链接一律内联到名称单元格**(`[会议名称](url)`),由 `meeting.link` 生成:**禁止**手工拼 URL,也**禁止**单列「详情链接」一行。
|
|
635
781
|
- **服务端业务/权限提示必须原文转达用户**:如"您没有变更权限!""您没有取消权限!""您没有删除权限!""您没有读取权限!"——不得改写成模糊说法,也不得建议用户绕过 CLI 自行拼接口。
|
|
636
|
-
- 错误驱动:`error.type/subtype`
|
|
782
|
+
- 错误驱动:`error.type/subtype` 决定下一步(XiaoE `session_expired` → CLI 底层已恢复,Agent 停止并反馈;`conflict_rejected` → 停止;`confirmation.required` → 补 confirm;`meeting_not_operable` → 核对会议 id 与可见性)。
|
|
637
783
|
|
|
638
784
|
## 写操作失败决策树
|
|
639
785
|
|
|
640
786
|
- 写请求发出后网络中断 / 超时 → CLI 返回 `partial/write_uncertain`:**立即停止,禁止自动重试**,先 `meeting.list` / `meeting.receipt.list` 只读回查确认是否已生效,确未生效才可重新 prepare。
|
|
641
787
|
- `apply` 返回 `target_changed` / `continuation_expired` → 重新执行 prepare,向用户重新确认。
|
|
642
788
|
- 冲突 `conflict_rejected` → 直接停止,不提供任何绕过选项。
|
|
643
|
-
- `session_expired` →
|
|
789
|
+
- XiaoE `session_expired` → CLI 底层已自动恢复并重放;最终仍失败时停止并反馈,不再登录或续跑。
|
|
644
790
|
|
|
645
791
|
## 不在范围
|
|
646
792
|
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
## 何时使用
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**默认就是 EB 版**:直接调 `meeting.eb.*`,不需要先判断环境。
|
|
6
|
+
|
|
7
|
+
- EB 在当前环境真的走不通时,CLI 会返回 `api/env_fallback` —— 此时它已经**实探过标准版并把环境模式固化成 `standard`**,按 `details.standardOperation` 改用标准版 operation 重试即可(`null` = 标准版没有该能力)。
|
|
8
|
+
- 用户明确问"当前是 EB 还是标准版"时,才跑 `meeting.env.detect --refresh` 实探;`assumed:true` 只是默认假设,不能当结论回答。
|
|
6
9
|
|
|
7
10
|
> 标准版与 EB 版是**两套独立接口与数据**:标准版是 Java REST(`/api/meeting/**`、表 `mt_detail` 等),
|
|
8
11
|
> EB 版是 eBuilder formdata(`/api/ebuilder/form/formdata/v2/**`、表 `uf_*`)。**不可混用、数据互不相通**——
|
|
@@ -54,7 +57,6 @@
|
|
|
54
57
|
Windows PowerShell:
|
|
55
58
|
|
|
56
59
|
```powershell
|
|
57
|
-
weaver-work-cli --json meeting run meeting.env.detect --input-json '{"refresh":true}'
|
|
58
60
|
weaver-work-cli --json meeting run meeting.eb.baseSet.get --input-json '{}'
|
|
59
61
|
weaver-work-cli --json meeting run meeting.eb.meeting.list --input-json '{"hrmmember":"100","mt_status":"2","pageSize":20}'
|
|
60
62
|
weaver-work-cli --json meeting run meeting.eb.meeting.detail --input-json '{"id":"<会议id>"}'
|
|
@@ -64,7 +66,6 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-jso
|
|
|
64
66
|
macOS/Linux(bash/zsh):
|
|
65
67
|
|
|
66
68
|
```bash
|
|
67
|
-
weaver-work-cli --json meeting run meeting.env.detect --input-json '{"refresh":true}'
|
|
68
69
|
weaver-work-cli --json meeting run meeting.eb.baseSet.get --input-json '{}'
|
|
69
70
|
weaver-work-cli --json meeting run meeting.eb.meeting.list --input-json '{"hrmmember":"100","mt_status":"2","pageSize":20}'
|
|
70
71
|
weaver-work-cli --json meeting run meeting.eb.meeting.detail --input-json '{"id":"<会议id>"}'
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
## 命令
|
|
14
14
|
|
|
15
|
+
> **默认按 EB 版执行,不需要先探测环境模式。** EB 在当前环境走不通时,CLI 会自动实探标准版、把环境模式固化成 `standard`,并返回 `api/env_fallback`(带 `details.standardOperation` 指明该改用哪个 operation)。只有要回答用户"当前是 EB 还是标准版"时,才跑 `meeting.env.detect --refresh` 实探。
|
|
16
|
+
|
|
15
17
|
Windows PowerShell:
|
|
16
18
|
|
|
17
19
|
```powershell
|
|
18
|
-
weaver-work-cli --json meeting run meeting.env.detect --input-json '{}'
|
|
19
20
|
weaver-work-cli --json meeting run meeting.list --input-json '{"filterDate":"2026-09-11"}'
|
|
20
21
|
weaver-work-cli --json meeting today
|
|
21
22
|
weaver-work-cli --json meeting run meeting.room.list --input-json '{"beginDate":"2026-09-11 09:00","endDate":"2026-09-11 10:00","onlyAvailable":true}'
|
|
@@ -28,7 +29,6 @@ weaver-work-cli --json meeting run meeting.detail.field --input-json '{"id":"<
|
|
|
28
29
|
macOS/Linux(bash/zsh):
|
|
29
30
|
|
|
30
31
|
```bash
|
|
31
|
-
weaver-work-cli --json meeting run meeting.env.detect --input-json '{}'
|
|
32
32
|
weaver-work-cli --json meeting run meeting.list --input-json '{"filterDate":"2026-09-11"}'
|
|
33
33
|
weaver-work-cli --json meeting today
|
|
34
34
|
weaver-work-cli --json meeting run meeting.room.list --input-json '{"beginDate":"2026-09-11 09:00","endDate":"2026-09-11 10:00","onlyAvailable":true}'
|
|
@@ -43,11 +43,14 @@ weaver-work-cli --json meeting run meeting.detail.field --input-json '{"id":"<
|
|
|
43
43
|
- `meeting.list` 返回 `meetings[]`(含 `id`/`name`/`beginDatetime`/`endDatetime`/`address`/`mtStatus`),按开始时间升序输出 Markdown 表格;CLI 自动翻页拉全量后做客户端 `filterDate` 过滤。
|
|
44
44
|
- `meeting.room.list` 返回 `rooms[]`(`disabled` 已归一化为布尔)与 `availableRooms[]`;带时间范围时 `disabled=true` 即该时段已被占用。
|
|
45
45
|
- `meeting.calendar.base` 返回 `createBaseData`:`onlyFlowCreate`(0=可手动建会 1=只能流程建会)、`workFlowBaseIds`、`repeatWorkFlowBaseIds`、`existWorkFlow`。
|
|
46
|
-
- `meeting.env.detect` 返回 `mode: "eb" | "standard"
|
|
47
|
-
-
|
|
48
|
-
- `
|
|
49
|
-
-
|
|
46
|
+
- `meeting.env.detect` 返回 `mode: "eb" | "standard"`:
|
|
47
|
+
- **没有探测结论时直接返回 `mode:"eb"` + `assumed:true`**(默认 EB,不冒烟、不写缓存、零网络请求);
|
|
48
|
+
- 命中缓存时返回 `fromCache:true`(按 baseUrl 固化);
|
|
49
|
+
- `refresh: true` 才实探:EB 冒烟优先,失败回退标准版,**成功即写缓存**;标准版回退时附带 `ebSmokeFailed`/`ebSmokeError`;
|
|
50
|
+
- `assumed:true` 只是默认假设,**不能当作"当前环境是 EB 版"的结论回答用户**;
|
|
50
51
|
- 两者冒烟均失败时报 `env_unavailable`(环境未配置完整,禁止强行执行)。
|
|
52
|
+
- **EB 失败降级**:EB operation 在环境级不可用时返回 `api/env_fallback`,`details` 含 `ebOperation` / `ebError` / `standardOperation`(对等标准版 operation,`null` 表示标准版没有该能力)/ `envModeUpdated`(`standard` 表示已固化缓存;`null` 表示只是偶发 5xx、未改缓存)。收到后按 `standardOperation` 重试,**不要**再跑 `meeting.env.detect`。
|
|
53
|
+
- 权限(403)、登录失效、参数校验、业务策略(`conflict_rejected` 等)**不会**触发降级 —— 换成标准版也一样失败,按原错误处理。
|
|
51
54
|
|
|
52
55
|
## 注意
|
|
53
56
|
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
1. **CLI**:`weaver-work-cli --version`。未安装或读取失败 → **必须先提示用户先补齐**(安装方式以共享规则为准,Agent 不能自行安装)。
|
|
10
10
|
2. **共享规则**:先读 `../weaver-e10-shared/SKILL.md`(安装、E10 认证、JSON 输出、高风险写入规则)。
|
|
11
11
|
3. **登录态**:`weaver-work-cli auth status --json` → `valid=true`;否 `=` `session_expired` 时按共享规则处理,**禁止**自行拼 Cookie。
|
|
12
|
-
4.
|
|
13
|
-
- `
|
|
12
|
+
4. **环境模式(默认 EB,不做前置探测)**:直接按 `meeting.eb.*` 执行即可。
|
|
13
|
+
- 无探测结论时 `meeting.env.detect` 会返回 `mode=eb` + `assumed:true`(**默认假设,不是探测结论**)。
|
|
14
|
+
- EB 真走不通会返回 `api/env_fallback`,此时 CLI 已实探标准版并把模式固化为 `standard`,按 `details.standardOperation` 改用标准版 operation;`standardOperation=null` 表示标准版没有该能力。
|
|
14
15
|
- **两套接口与数据互不相通**,在 EB 环境调标准版接口只会拿到空数据(反之亦然)。
|
|
16
|
+
- 只有要回答"当前是 EB 还是标准版"时,才跑 `meeting.env.detect --refresh` 实探。
|
|
15
17
|
5. **多租户提醒**:同一账号在不同站点(baseUrl)看到的会议不同;验证前先记录 `baseUrl` 与 `userId`,写入类验证**只用自建数据**。
|
|
16
18
|
|
|
17
19
|
## 2. 验证纪律(硬规则,违反即结论无效)
|
|
@@ -44,7 +46,7 @@
|
|
|
44
46
|
|
|
45
47
|
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
46
48
|
|---|---|---|---|---|---|
|
|
47
|
-
| 1 | `meeting.env.detect` | read | — |
|
|
49
|
+
| 1 | `meeting.env.detect` | read | — | 无缓存时返回 `mode=eb` + `assumed:true`(零请求);`refresh:true` 才实探 | — |
|
|
48
50
|
| 2 | `meeting.calendar.base` | read | — | 返回工作日/时段等日历基础设置 | — |
|
|
49
51
|
| 3 | `meeting.detail.field` | read | `id` | `R-DETAIL` | 用 `meeting.list` 取 id |
|
|
50
52
|
| 4 | `meeting.list` | read | — | `R-LIST`(客户端按 `filterDate` 过滤,天然覆盖各角色) | — |
|
|
@@ -272,9 +274,9 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-jso
|
|
|
272
274
|
你是会议模块的验证执行方。请读取本 skill 的 references/meeting-verification.md,按其中的顺序与判据,
|
|
273
275
|
对当前环境的会议功能做一次**全量验证**(标准版 28 + EB 版 91 + 跨模式 13,共 132 个 operation):
|
|
274
276
|
|
|
275
|
-
1.
|
|
276
|
-
2.
|
|
277
|
-
写入按「prepare → 我给确认 → apply → 回读 → 清理」四步走,**只用自建数据**(名称带 CLI-VERIFY-
|
|
277
|
+
1. 先做先决条件(CLI 版本、共享规则、登录态),并记录 `baseUrl` / `userId`;**环境模式默认按 EB 走,不要前置探测**——需要确认到底是 EB 还是标准版时,才跑 `meeting.env.detect --refresh` 实探(`assumed:true` 不算结论),把结果报给我。
|
|
278
|
+
2. 默认执行 EB 版 operation(第 4 节表格),逐条对判据;只读直接跑,
|
|
279
|
+
写入按「prepare → 我给确认 → apply → 回读 → 清理」四步走,**只用自建数据**(名称带 CLI-VERIFY- 前缀)。若某条返回 `api/env_fallback`,说明本环境是标准版,按 `details.standardOperation` 换标准版重跑并记录。
|
|
278
280
|
3. 第 6 节的 8 项不在范围,**不要尝试**,如实说明即可;第 7 节的 15 个负向用例必须逐个跑。
|
|
279
281
|
4. 任何失败都要给出原始 error.type/subtype 与报错文案,禁止把失败写成"没有数据"。
|
|
280
282
|
5. 最后按第 8 节模板给我一份完整回执,并列出未清理干净的数据 id。
|
|
Binary file
|
|
@@ -104,11 +104,11 @@ OKR 目标在不同租户走**两套互不兼容的接口链路**,由 `okr.ver
|
|
|
104
104
|
|
|
105
105
|
- 遇到 `partial`、`write_uncertain`、登录失效、回查失败或网络中断,立即停止当前写流程,不自动重试写入。
|
|
106
106
|
- 认证类错误(`authentication`/`session_expired`):停止当前操作并读取 `weaver-e10-shared` 的认证规则。
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
- 已有 XiaoE 会话的 `session_expired` 已由 CLI 底层自动换票并重放一次;若错误最终仍返回,Agent 只反馈并停止,不执行任何登录命令、其他登录 Skill 或原业务命令。
|
|
108
|
+
- 仅首次无会话或明确的 `auth not found` 才由 Agent 复用任务开始时的宿主判定。
|
|
109
|
+
- 首次认证明确为 XiaoE 时,执行一次 `weaver-work-cli auth xiaoe`;返回 `authentication/xiaoe_credential_unavailable` 时停止,不回退浏览器登录。
|
|
110
|
+
- 首次认证且非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
|
|
111
|
+
- 显式登录后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
112
112
|
- `policy/link_unsupported`:当前链路没有该能力,不要换接口硬试,按 reference 中的替代路径处理。
|
|
113
113
|
- `validation/link_filter_unsupported`:ebuilder 链路列表不支持该筛选条件,改用 `query_scope=self` 或 `principalid` + 周期条件。
|
|
114
114
|
- `validation/period_quarter_invalid`、`validation/scope_data_id_required`、`validation/principal_dept_required`:补齐周期/部门参数后重试 prepare。
|
|
@@ -573,7 +573,7 @@
|
|
|
573
573
|
}
|
|
574
574
|
},
|
|
575
575
|
"artifactBaseline": {
|
|
576
|
-
"aggregateSha256": "
|
|
576
|
+
"aggregateSha256": "85e2d5c138f4a2c399e9a6aece690be88c53801e269504c63236292e61ea51b1",
|
|
577
577
|
"files": [
|
|
578
578
|
{
|
|
579
579
|
"path": "src/shortcuts/okr/errors.ts",
|
|
@@ -647,8 +647,8 @@
|
|
|
647
647
|
},
|
|
648
648
|
{
|
|
649
649
|
"path": "skills/weaver-e10-okr/SKILL.md",
|
|
650
|
-
"size":
|
|
651
|
-
"sha256": "
|
|
650
|
+
"size": 11399,
|
|
651
|
+
"sha256": "1fea70a1b74d4b089a1efc2f7e615ec9fb44a0afef895d43fcb1daaac5cd5b4c"
|
|
652
652
|
},
|
|
653
653
|
{
|
|
654
654
|
"path": "docs/okr.md",
|
|
@@ -110,11 +110,11 @@ weaver-work-cli --json plan run <operation> --input-json '{"key":"value"}'
|
|
|
110
110
|
## 失败处理
|
|
111
111
|
|
|
112
112
|
- 认证类错误(`authentication` / `session_expired`):停止当前操作并读取 `weaver-e10-shared` 的认证规则。
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
- 已有 XiaoE 会话的 `session_expired` 已由 CLI 底层自动换票并重放一次;若错误最终仍返回,Agent 只反馈并停止,不执行任何登录命令、其他登录 Skill 或原业务命令。
|
|
114
|
+
- 仅首次无会话或明确的 `auth not found` 才由 Agent 复用任务开始时的宿主判定。
|
|
115
|
+
- 首次认证明确为 XiaoE 时,执行一次 `weaver-work-cli auth xiaoe`;返回 `authentication/xiaoe_credential_unavailable` 时停止,不回退浏览器登录。
|
|
116
|
+
- 首次认证且非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
|
|
117
|
+
- 显式登录后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
118
118
|
- `policy` / `link_unsupported`:该能力在当前链路不可用(例如 eb 链路的撤回、提交提醒、评论),按错误 `message` 给出的替代路径处理。
|
|
119
119
|
- `validation` / `not_found` / `report_exists` / `already_published` / `not_published`:属业务前置条件不满足,先向用户说明再决定下一步,禁止反复重试。
|
|
120
120
|
- `partial` / `write_uncertain`:立即停止写入流程,做一次只读回查后向用户说明。
|
|
@@ -53,7 +53,7 @@ XiaoE 环境有两种识别入口:桌面客户端由 Agent 根据宿主或任
|
|
|
53
53
|
- 工作目录名含 `xiaoeUserData`、使用 XiaoE 内置 Node.js,或已安装相关 CLI;
|
|
54
54
|
- 过去在同一台机器上登录或安装过 XiaoE。
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
桌面客户端首次没有本地会话时,Agent 判定为 XiaoE 后显式执行 `weaver-work-cli auth xiaoe`;后续业务命令只有需要 XiaoE 专属业务行为时才在 `weaver-work-cli` 之后加 `--runtime-agent xiaoe`,例如 `weaver-work-cli --runtime-agent xiaoe workflow ...`。已保存的 XiaoE 会话过期恢复不依赖这个参数,也不依赖 Skill 或 Agent:CLI 会根据会话内的 `agentType` / `loginSource` 在公共请求层自行处理。`--runtime-agent` 不携带、不选择凭据。
|
|
57
57
|
|
|
58
58
|
WorkBuddy、Codex 及其他智能体一律使用 `weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"` 走浏览器 OAuth。`auth login` / `auth oidc` 不会读取或消费 XiaoE 凭据。
|
|
59
59
|
|
|
@@ -67,9 +67,9 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
67
67
|
|
|
68
68
|
下述 `auth xiaoe` 流程仅适用于上述已确认的 XiaoE 智能体环境;其他智能体不执行宿主脚本检测,直接进入浏览器 OAuth 流程。`auth xiaoe` 命令本身就是认证方式的显式选择;`hasXiaoEEnv` 使用桌面的 `--runtime-agent xiaoe` 或任意 `XIAOE_*` 环境变量识别运行环境。
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
首次缺少本地会话时只运行 `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 内部执行和解析。已有 XiaoE 会话被接口明确拒绝为失效时,CLI 根据会话元数据在公共请求层静默恢复并重放一次;这个流程绕开 shared Skill,Agent 不参与,也不得再补跑登录或原业务命令。失败时 CLI 返回最终结构化错误。
|
|
71
71
|
|
|
72
|
-
1.
|
|
72
|
+
1. 首次无本地登录态、准备执行业务命令前需要建立 E10 会话,或 `auth status --no-check` 显示未登录时,运行:
|
|
73
73
|
```text
|
|
74
74
|
weaver-work-cli auth xiaoe
|
|
75
75
|
```
|
|
@@ -77,18 +77,18 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
77
77
|
3. XiaoE 统一登录由 CLI 按序取凭证:① 平台注入的 `XIAOE_USER_TOKEN` + `XIAOE_DOMAIN`,先走 Node 换票,再由 CLI npm 包自带的标准库 `xiaoe_env.py` 作兼容回退;② 宿主 `xiaoeUserData/tokens.py`(仅桌面宿主,CLI 在 macOS/Windows 都会先自动发现 XiaoE 客户端内置 Python,再回退到系统 Python);③ 内置原生实现读取桌面 XiaoE 客户端会话换取 `eteamId`,依次查找 `XIAOE_USER_SETTINGS_PATH`、`XIAOE_ROBOT_DATA_ROOT` / `XIAOE_ROBOT_ROOT` 和默认 `XiaoE/Robots/<id>/user_settings.json`,因此会话有效时不要求存在 `tokens.py`;④ `WEAVER_XIAOE_*` 环境映射。宿主只注入 `XIAOE_DOMAIN`、`XIAOE_USER_TOKEN` 等平台变量,不会注入 ETEAMSID 环境变量,CLI 也不读取 `XIAOE_ETEAMSID`。Agent 不要打印、转述、索取或要求用户手动设置这些凭证,也不要直接执行任一脚本或因为脚本报缺依赖就让用户安装 Python 包——凭据链内部的兼容回退由 CLI 完成。
|
|
78
78
|
4. `auth xiaoe` 是 XiaoE 认证方式的显式入口:CLI 不再判断当前宿主,只检查并消费可用凭据源。E10 目标地址按「显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile → CLI 内置默认值」解析,绝不能把 `XIAOE_DOMAIN` 当作 E10 地址。Token、Cookie、ETEAMSID 仍属于凭证,禁止在回复中展示。
|
|
79
79
|
5. XiaoE 统一登录走不通时,无论 macOS、Windows、Linux 或 Web,CLI 都返回 `authentication/xiaoe_credential_unavailable`,绝不自动打开浏览器或降级到 `auth login`;本任务必须停止,不得另行调用其他登录 Skill 或登录命令。
|
|
80
|
-
6. `auth status --no-check` 不会触发 XiaoE
|
|
80
|
+
6. `auth status --no-check` 不会触发 XiaoE 统一登录;业务命令加载到 `agentType=XiaoE` 或 `loginSource=xiaoe-unified` 的会话并被 E10 明确拒绝为失效时,即使没有 `XIAOE_*` 或 `--runtime-agent xiaoe`,也会静默触发一次统一登录并重放该请求一次。首次无本地会话仍须显式执行 `auth xiaoe`;具体读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
81
81
|
|
|
82
82
|
### 认证错误只报告状态,不指定登录命令
|
|
83
83
|
|
|
84
84
|
CLI 和业务 Skill 在返回 `authentication` / `session_expired` 时,只能说明未登录或会话已失效,不得在 `error.message` 或业务错误分支中写死 `auth login`、`auth xiaoe`、`--base-url`、`--agent_type` 等具体登录命令或参数。
|
|
85
85
|
|
|
86
|
-
业务 Skill
|
|
86
|
+
业务 Skill 的提示词必须区分“CLI 已处理的过期恢复”和“首次认证缺失”,不能让 Agent 接管底层自动恢复:
|
|
87
87
|
|
|
88
|
-
1. Agent
|
|
89
|
-
2.
|
|
90
|
-
3.
|
|
91
|
-
4.
|
|
88
|
+
1. 已有 XiaoE 会话出现 `session_expired` 时,CLI 已在公共请求层自动取凭据、校验同一环境/用户并重放一次;若该错误最终仍返回,Agent 只反馈错误并停止,不执行 `auth xiaoe`、其他登录 Skill 或原业务命令。
|
|
89
|
+
2. 仅首次无会话或明确的 `auth not found` 才由 Agent 重用任务开始时的宿主判定;明确为 XiaoE 时执行一次 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用。
|
|
90
|
+
3. 首次认证缺失且非 XiaoE 时,不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。已有可用 profile 时也可按用户选择切换并验证。
|
|
91
|
+
4. 显式登录后读操作可以重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial` / `write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
92
92
|
|
|
93
93
|
`auth xiaoe` 的 preflight 会输出不含凭证的 `authMode=xiaoe`、`credentialSourceDetected`、`attempted`、`platformCredentialDetected`、`tokenScriptDetected`、`clientSettingsDetected`、`environmentCredentialDetected` 和 `baseUrl`;命中脚本分支时会出现 `Trying XiaoE token script credential...`,命中内置 Node 会话分支时会出现 `Trying built-in XiaoE client session credential...`。成功后登录结果和 `auth status` 中的 `credentialSourceStep`、`credentialSourceType`、`credentialSourceLabel` 用于确认实际来源;`2 / token_script / xiaoeUserData/tokens.py` 表示宿主脚本换票成功,`3 / xiaoe_client / XiaoE client settings` 表示不依赖 `tokens.py`、由 Node 直接换票成功。
|
|
94
94
|
|
|
@@ -181,7 +181,7 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
181
181
|
| 强触发条件 | Reference |
|
|
182
182
|
| --- | --- |
|
|
183
183
|
| 命令不可用、Agent 自动安装 CLI、安装、构建、全局 link、检查可用 skill | [`weaver-e10-installation.md`](references/weaver-e10-installation.md) |
|
|
184
|
-
| 登录、profile、E10 会话、baseUrl、auth 文件、`WEAVER_*` / `XIAOE_*`
|
|
184
|
+
| 登录、profile、E10 会话、baseUrl、auth 文件、`WEAVER_*` / `XIAOE_*` 环境变量;**首次未登录需选择认证方式,XiaoE 会话过期由 CLI 底层恢复** | [`e10-auth-and-session.md`](references/e10-auth-and-session.md) |
|
|
185
185
|
| 容器/沙箱/CI/无 GUI 环境、无人值守、登录类命令超过 180 秒未结束、出现 `Open browser login` / `Waiting for E10 authorization callback` / `Could not open browser automatically`、`auth xiaoe` 返回凭据不可用、认证目录 `EACCES` | [`non-interactive-environment.md`](references/non-interactive-environment.md) |
|
|
186
186
|
| 判断 stdout/stderr、JSON envelope、退出码、脚本封装、自动化调用、大结果渲染/分页控量 | [`json-output-contract.md`](references/json-output-contract.md) |
|
|
187
187
|
| 准备执行写入/删除/导入/更新、遇到 `confirmation.required`、`partial.write_uncertain`、网络中断或回查失败 | [`high-risk-write.md`](references/high-risk-write.md) |
|
|
@@ -198,8 +198,8 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
198
198
|
|
|
199
199
|
5. 不能猜测 CLI 未暴露的内部字段、接口路径、ID 解析逻辑或回查语义。
|
|
200
200
|
|
|
201
|
-
6.
|
|
201
|
+
6. 已有 XiaoE 会话的 `session_expired` 由 CLI 底层自动处理,Agent 不运行任何登录命令或重试业务命令;最终仍返回该错误时只反馈并停止。首次未登录或 `auth status` 未登录时,Agent 若已判定为 XiaoE,可运行一次 `weaver-work-cli auth xiaoe`;统一登录不可用时反馈 CLI 原因并停止。任意系统都不得把 `xiaoe_credential_unavailable` 改成浏览器 OAuth、本地终端操作或其他登录 Skill。仅首次认证缺失且非 XiaoE 环境在用户确认真实 E10 域名后运行 `auth login`,并传入 `--agent_type "<当前智能体名称>"`。具体流程读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
202
202
|
|
|
203
203
|
7. 附件、图片上传或文件解析属于敏感数据处理。即便 operation 风险等级不是高风险写入,也必须先取得用户对“文件内容可能进入大模型/外部解析服务”的明确确认;不能把用户仅提供文件路径或文件名视为同意解析或上传。
|
|
204
204
|
|
|
205
|
-
8. Agent 明确选择 `auth xiaoe` 后,CLI 按顺序从平台注入凭证(Node 换票后由 CLI npm 包自带 `xiaoe_env.py` 兼容回退)、宿主 `xiaoeUserData/tokens.py`、内置原生实现读取的桌面 XiaoE 客户端会话(宿主注入路径优先、默认 `XiaoE/Robots/<id>/user_settings.json` 回退)、`WEAVER_XIAOE_*`
|
|
205
|
+
8. Agent 明确选择 `auth xiaoe` 后,CLI 按顺序从平台注入凭证(Node 换票后由 CLI npm 包自带 `xiaoe_env.py` 兼容回退)、宿主 `xiaoeUserData/tokens.py`、内置原生实现读取的桌面 XiaoE 客户端会话(宿主注入路径优先、默认 `XiaoE/Robots/<id>/user_settings.json` 回退)、`WEAVER_XIAOE_*` 环境映射读取支持统一登录的凭证。业务命令不会在首次无会话时自动登录,但已有会话被接口明确拒绝时会根据持久化会话的 `agentType` / `loginSource` 静默恢复 1 次,不要求 Agent 添加 `--runtime-agent xiaoe`;该参数仅用于其他 XiaoE 专属业务行为。不要要求用户提供、展示或手动设置这些凭证。任意系统失败时都反馈结构化错误,不自动降级浏览器。
|