weaver-work-cli 0.1.20 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +19 -11
  2. package/dist/core/refs.js +39 -36
  3. package/dist/internal/e10/auth/commands.js +33 -18
  4. package/dist/internal/e10/auth/session.js +60 -2
  5. package/dist/internal/e10/auth/xiaoe.js +253 -53
  6. package/dist/internal/e10/context.js +18 -6
  7. package/dist/internal/e10/request-runtime.js +3 -1
  8. package/dist/shortcuts/caizhilian/operations/confirm.js +1 -1
  9. package/dist/shortcuts/caizhilian/operations/handlers/file-collection.js +901 -20
  10. package/dist/shortcuts/caizhilian/operations/handlers/folder.js +55 -0
  11. package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +4 -4
  12. package/dist/shortcuts/caizhilian/operations/specs.js +75 -0
  13. package/dist/shortcuts/hrm/manifest.js +16 -9
  14. package/dist/shortcuts/hrm/operations/registry.js +2 -0
  15. package/dist/shortcuts/hrm/operations/resolve.js +449 -0
  16. package/dist/shortcuts/invoice/host.js +5 -4
  17. package/dist/shortcuts/meeting/operations/eb/association.js +151 -0
  18. package/dist/shortcuts/meeting/operations/eb/attendance-summary.js +153 -0
  19. package/dist/shortcuts/meeting/operations/eb/catalog.js +185 -13
  20. package/dist/shortcuts/meeting/operations/eb/conflict.js +17 -11
  21. package/dist/shortcuts/meeting/operations/eb/decision.js +385 -0
  22. package/dist/shortcuts/meeting/operations/eb/factory.js +222 -35
  23. package/dist/shortcuts/meeting/operations/eb/index.js +18 -1
  24. package/dist/shortcuts/meeting/operations/eb/link.js +212 -0
  25. package/dist/shortcuts/meeting/operations/eb/task-progress.js +123 -0
  26. package/dist/shortcuts/meeting/operations/env.js +78 -61
  27. package/dist/shortcuts/meeting/operations/link.js +125 -0
  28. package/dist/shortcuts/meeting/operations/registry.js +2 -0
  29. package/dist/shortcuts/meeting/operations/shared.js +13 -0
  30. package/dist/shortcuts/workflow/host.js +5 -1
  31. package/dist/shortcuts/workflow/operations/form.js +95 -11
  32. package/dist/shortcuts/workflow/operations/read.js +785 -26
  33. package/docs/e10-auth.md +8 -2
  34. package/docs/hrm.md +34 -2
  35. package/docs/invoice.md +3 -0
  36. package/package.json +2 -2
  37. package/scripts/xiaoe_env.py +118 -0
  38. package/skill-template/domains/hrm.md +2 -1
  39. package/skill-template/skill-template.md +1 -1
  40. package/skills/weaver-e10-blog/SKILL.md +1 -1
  41. package/skills/weaver-e10-caizhilian/SKILL.md +5 -4
  42. package/skills/weaver-e10-caizhilian/references/file-collection.md +37 -0
  43. package/skills/weaver-e10-caizhilian/references/folder.md +5 -1
  44. package/skills/weaver-e10-caizhilian/references/setting-attach.md +35 -5
  45. package/skills/weaver-e10-caizhilian/references/source-manifest.json +620 -5
  46. package/skills/weaver-e10-calendar/SKILL.md +1 -1
  47. package/skills/weaver-e10-ebuilder-form/SKILL.md +1 -1
  48. package/skills/weaver-e10-esb/SKILL.md +1 -1
  49. package/skills/weaver-e10-hrm/SKILL.md +52 -5
  50. package/skills/weaver-e10-hrm/references/org.md +107 -1
  51. package/skills/weaver-e10-jinchengda/SKILL.md +2 -1
  52. package/skills/weaver-e10-jiuchuanhui/SKILL.md +1 -1
  53. package/skills/weaver-e10-jucailin/SKILL.md +1 -1
  54. package/skills/weaver-e10-mail/SKILL.md +1 -1
  55. package/skills/weaver-e10-meeting/SKILL.md +27 -11
  56. package/skills/weaver-e10-meeting/references/meeting-eb.md +162 -7
  57. package/skills/weaver-e10-meeting/references/meeting-verification.md +271 -0
  58. package/skills/weaver-e10-meeting.zip +0 -0
  59. package/skills/weaver-e10-okr/SKILL.md +1 -1
  60. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  61. package/skills/weaver-e10-plan/SKILL.md +1 -1
  62. package/skills/weaver-e10-qiyecheng/SKILL.md +1 -1
  63. package/skills/weaver-e10-shared/SKILL.md +10 -13
  64. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +11 -17
  65. package/skills/weaver-e10-shared/references/non-interactive-environment.md +21 -14
  66. package/skills/weaver-e10-shijingran/SKILL.md +1 -1
  67. package/skills/weaver-e10-skill-maker/SKILL.md +1 -1
  68. package/skills/weaver-e10-skill-maker/references/weaver-skill-style.md +1 -1
  69. package/skills/weaver-e10-wenshuding/SKILL.md +1 -1
  70. package/skills/weaver-e10-workflow/SKILL.md +19 -19
  71. package/skills/weaver-e10-workflow/references/source-manifest.json +13 -13
  72. package/skills/weaver-e10-workflow/references/workflow-create.md +11 -7
  73. package/skills/weaver-e10-workflow/references/workflow-query.md +9 -14
  74. package/skills/weaver-e10-yepiaotong/SKILL.md +1 -2
  75. package/skills/weaver-e10-yimiaoban/SKILL.md +1 -1
  76. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
  77. package/skills/weaver-e10-ziguanjia/SKILL.md +1 -1
@@ -15,7 +15,7 @@ cliHelp: "weaver-work-cli calendar --help"
15
15
 
16
16
  # 泛微E10日程管理
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
19
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
20
20
 
21
21
  本技能覆盖日程管理业务域:**创建日程**、**查询列表**、**查询详情**、**查询总数**、**更新日程**、**删除日程**、**查询类型/紧急程度字典**、**应用版本检测**。写操作(创建/更新/删除)全部走 prepare→apply 确认协议。
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli ebuilder-form --help"
17
17
 
18
18
  # 泛微E10 eBuilder表单
19
19
 
20
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
20
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
21
21
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
22
22
 
23
23
  本技能覆盖 eBuilder 表单菜单定位、List/NList 页面查询、字段/选项/浏览字段解析,以及 OpenAPI 和已发布自定义接口的表单数据读写。所有业务调用必须通过 `weaver-work-cli ebuilder-form`,禁止绕过 CLI 直接拼 E10 接口、Cookie、ETEAMSID 或 `/api/bs/` 路径。
@@ -15,7 +15,7 @@ cliHelp: "weaver-work-cli esb --help"
15
15
 
16
16
  # 泛微E10 ESB动作流执行
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
19
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
20
20
 
21
21
  本技能覆盖 ESB 中心的**自定义触发类型动作流**:取入参模板(只读)与执行动作流(写操作,需确认)。按动作流名称解析 ID、唯一值对应的 `primary_key` SQL 查询都不在本技能范围内,见「不在范围」。
@@ -5,7 +5,7 @@ display_name_en: Weaver E10 Organization Management
5
5
  description: 泛微E10组织管理(员工/组织/岗位查询)的 E10 查询能力,通过 weaver-work-cli hrm 命令执行。
6
6
  description_zh: 泛微E10组织管理(员工/组织/岗位查询)的 E10 查询能力,通过 weaver-work-cli hrm 命令执行。
7
7
  description_en: Weaver E10 Organization Management capabilities for E10, covering employee, organization and position queries, delivered through the weaver-work-cli hrm command.
8
- version: 1.0.22
8
+ version: 1.0.28
9
9
  author: 泛微网络科技股份有限公司
10
10
  agent_created: true
11
11
  requires:
@@ -15,10 +15,10 @@ cliHelp: "weaver-work-cli hrm --help"
15
15
 
16
16
  # 泛微E10组织管理
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
19
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
20
20
 
21
- 本技能覆盖组织管理三大业务域:**员工(employee)**、**组织(org)**、**岗位(position)**,全部为只读查询,无写操作。代理商查询(`containsDls=true`)属于禁用边界,见 [`references/employee.md`](references/employee.md)。
21
+ 本技能覆盖组织管理三大业务域:**员工(employee)**、**组织(org)**、**岗位(position)**,全部为只读查询,无写操作。代理商查询(`containsDls=true`)属于禁用边界,见 [`references/employee.md`](references/employee.md)。组织域额外提供**多维(虚拟组织维度)解析** `hrm.org.resolve`,见下方「多维解析」。
22
22
 
23
23
  ## 命令入口
24
24
 
@@ -42,10 +42,54 @@ weaver-work-cli --json hrm run <operation> --input -
42
42
  | --- | --- |
43
43
  | 查员工、工号/手机/邮箱、查下属、部门成员、批量人员、人员详情 | [`references/employee.md`](references/employee.md) |
44
44
  | 查分部、查部门、组织架构、层级路径、组织详情 | [`references/org.md`](references/org.md) |
45
+ | **按「多维名称 + 部门/分部名称」找组织**(多维 / 虚拟组织 / 维度) | [`references/org.md`](references/org.md) 的「多维解析」 |
45
46
  | 查岗位、岗位详情、批量岗位 | [`references/position.md`](references/position.md) |
46
47
  | **按部门/分部反查人员**(某部门下有哪些人) | [`references/employee.md`](references/employee.md) 的「按组织反查人员」 |
47
48
  | **按岗位反查人员**(某岗位下有哪些人) | 本技能不支持,需跨到 `weaver-e10-jucailin`;先读下方「反查人员的能力边界」 |
48
49
 
50
+ ## 多维解析(`hrm.org.resolve`):一次调用,禁止自己分两步推理
51
+
52
+ E10 组织树按**多维**(虚拟组织维度,如「行政组织」「1号维度」「备份维度」)切分,同名部门/分部在不同维度下是**不同节点**;组织浏览接口不传 `companyId` 会**默认落到「行政组织」维度**。所以「按名称找部门/分部」需要先定位多维 id,再带 `companyId` 查组织。
53
+
54
+ **这段编排已在 CLI 内实现,Agent 只调一次 `hrm.org.resolve`,不要自己先查维度、再查组织。**
55
+
56
+ ```text
57
+ weaver-work-cli --json hrm run hrm.org.resolve --input-json '{"virtual":"1号维度","name":"第一团队"}'
58
+ ```
59
+
60
+ - 入参:`virtual`(多维名称)+ `name`(部门/分部名称);`type` 可选(`department`/`subcompany`,**不传时同时检索两者、按部门优先定位**);歧义候选**默认最多回 20 条**,要一次性看全时传 `maxCandidates`(1~200)。
61
+ - 匹配分**三级**,"能不能自动往下走"完全不同,别混为一谈:
62
+
63
+ | 级别 | 判定 | CLI 行为 |
64
+ | --- | --- | --- |
65
+ | ① 精确 | 忽略大小写/空白的全等 | 唯一 → 继续;多个 → `ambiguous` |
66
+ | ② 包含(模糊) | 名称是关键字子串 | 唯一 → 继续;多个 → `ambiguous` |
67
+ | ③ **近似(打字级差异,如「客服维度」→「客户维度」)** | 编辑距离阈值内 | **只回 `suggestions`,`status = not_found`,绝不继续** |
68
+
69
+ ### 🔴 不要替用户做主(三条硬边界,违反即算答错)
70
+
71
+ 1. **禁止自行替换/纠正名称**。用户说「客服维度」,就只能在「客服维度」不存在时**如实告知**;不许把「客户维度」当成用户的意思直接用(这是最典型的越权:看着像就替用户认了)。
72
+ 2. **禁止在 `ambiguous` 里替用户选**。不许取第一条、不许取「看起来最像的」、不许取「唯一直属根节点的」——一律列表让用户挑。
73
+ 3. **`not_found` ≠ 换个名字再试**。必须把 `data.message` + `data.suggestions`(近似名称)+ `data.availableVirtuals`(该租户全部多维)原样交给用户,等用户确认;**用户确认后**才用 `virtualId`(维度)/ `orgId`(组织)复调,不要再用名称猜。
74
+
75
+ > 实例:`{"virtual":"客服维度","name":"云桥测试"}` → `not_found`(`suggestions: [客户维度]`)。正确回复是「本租户没有『客服维度』,最接近的是『客户维度』(id …),要用它继续查『云桥测试』吗?」——**不是**直接返回客户维度下的结果。
76
+ > 反过来,③ 之外的 ①② 是 CLI 既定行为(属于系统收敛,不属于你改名),命中了就正常往下走。
77
+
78
+ - **结果判定只看 `data.status`,不要只看 `ok`**(本操作三种结果都是 `ok: true`):
79
+
80
+ | `data.status` | 含义 | Agent 必须做什么 |
81
+ | --- | --- | --- |
82
+ | `resolved` | 已定位唯一组织 | 用 `data.org`(`id`/`name`/`type`/`fullPath`/`link`)直接回答,用 `[名称](link)` 呈现;**若同时回 `data.alsoMatched`(同名但另一类型的节点,如既有同名部门又有同名分部),必须一并告知用户**,不要只报 `org` |
83
+ | `ambiguous` | 精确或包含命中多个 | **停下来问用户**:把 `data.candidates` 以表格(名称 / `fullPath` / link)列出让用户选,不要自行挑一个;候选被截断(`truncated: true`)时先告知总数,用户要全量就用 `maxCandidates` 复调 |
84
+ | `not_found` | 名称不存在(含"只有近似名称"的情况) | 原样转述 `data.message`,并把 `data.suggestions`/`data.availableVirtuals` 一并给用户确认;**禁止自行替换名称后重试** |
85
+
86
+ - 用户确认候选后**复调同一个操作**:把候选的 `id` 作为 `orgId` 传回(若是维度歧义,把维度 `id` 作为 `virtualId` 传回),一次即可定位;**不要再用名称重试猜**。
87
+ - **🔴「这个租户有哪些多维」暂不支持**(`hrm.org.virtuals` 已下线,`hrm schema --full` 的 `withheldOperations` 里有声明):
88
+ - 没有列维度的 operation,**也不许绕**——不要故意传一个不存在的维度名去套 `not_found.availableVirtuals` 来"列清单",那属于构造假查询。
89
+ - `availableVirtuals` 只用于**纠错**(用户给的名字对不上时,顺手告诉他本租户有哪些维度可参考),维度 id 也只从 `not_found.availableVirtuals` / 维度歧义的 `candidates` 里取。
90
+ - 用户明确问"有哪些多维"时 → 直接回答**该能力暂不支持**,并请其改用「维度名 + 组织名」的方式查询。
91
+ - 完整契约、匹配规则与示例见 [`references/org.md`](references/org.md) 的「多维解析」。
92
+
49
93
  ## 反查人员的能力边界
50
94
 
51
95
  "这个部门/岗位下有哪些人"是高频误判点,先按下表判断,**不要默认认为 hrm 整个模块都做不到**:
@@ -106,7 +150,9 @@ weaver-work-cli --json hrm run <operation> --input -
106
150
  - 说明:服务端**不校验**该上限(实测 `pageSize=500` 会原样返回 500 行,不传 `pageSize` 时服务端按 20 返回),所以这条是**本技能为控制上下文体积定下的自觉约束**。Agent 必须遵守,不得因为"服务端没拦"就放大取值。
107
151
  - **🔴 `status` 不能单独使用**:`employee.query` 的 `status`(`["normal"]` 在职 / `["6"]` 离职)必须搭配其它条件(keyword/工号/姓名/手机/邮箱)。
108
152
  - **批量禁止循环单查**:批量查询一律走 `batch`(每批 ≤100,CLI 自动分批);岗位批量走 `position.list` 一次性返回,禁止按 id 逐个调详情。
109
- - **姓名/工号/名称模糊匹配**:多人命中时必须列出候选让用户选择,不得自动取第一条;`dept.members` 部门重名时报 `dept_ambiguous`,需改用组织 id。
153
+ - **姓名/工号/名称模糊匹配**:多人命中时必须列出候选让用户选择,不得自动取第一条;`dept.members` 部门重名时报 `dept_ambiguous`,需改用组织 id。`hrm.org.resolve` 不抛歧义错误,而是回 `data.status = ambiguous` + `data.candidates`,同样必须问用户、不得自动取第一条。
154
+ - **🔴 禁止自主任意解读名称**:`hrm.org.resolve` 报 `not_found` 时,`data.suggestions`(近似名称)**只是给用户看的提示,不是给你用的参数**——不得据此改名重试、也不得省略「不存在」这一事实直接给结果。凡「名称对不上」一律先回用户,用户确认后再用 `virtualId`/`orgId` 复调。
155
+ - **🔴 禁止绕取未暴露能力**:`hrm.employee.dls`(代理商查询)与 `hrm.org.virtuals`(列多维)都在 `hrm schema --full` 的 `withheldOperations` 里声明为不可用;**不得构造假查询(如故意传不存在的维度名)去套内部字段**、也不得编造或绕过。用户问到就如实回答暂不支持。
110
156
  - **人员 id、组织 id、岗位 id 都是长整型**,一律按字符串传递。
111
157
  - **代理商查询禁用**:`hrm.employee.dls`(`containsDls=true`)仅泛微自用系统支持,已列为禁用边界,不得编造或绕过。
112
158
 
@@ -114,7 +160,8 @@ weaver-work-cli --json hrm run <operation> --input -
114
160
 
115
161
  - `code=302` 或认证类错误:引导用户执行 `weaver-work-cli auth login`,不要用其他方式排查。
116
162
  - 业务失败看 stderr JSON 的 `error.type` / `error.subtype` / `error.message`,不要用退出码 `0` 判断成功。
117
- - 常见业务错误:`empty_condition`(空条件拉取被拦截)、`full_pull_blocked`(岗位全量需 `all=true`)、`dept_not_found`/`dept_ambiguous`(组织未找到或重名,改用 id)、`enum_invalid`(枚举取值非法)、`permission_denied`(接口开关未开启)。
163
+ - 常见业务错误:`empty_condition`(空条件拉取被拦截)、`full_pull_blocked`(岗位全量需 `all=true`)、`dept_not_found`/`dept_ambiguous`(组织未找到或重名,改用 id)、`enum_invalid`(枚举取值非法)、`permission_denied`(接口开关未开启)、`virtual_required`/`name_required`(`hrm.org.resolve` 缺多维或多维名称参数)。
164
+ - `hrm.org.resolve` 的「没找到 / 命中多个」**不是错误**:命令仍退出 0、`ok: true`,判定以 `data.status` 为准,不要把 `not_found` 当异常重试。
118
165
 
119
166
  ## 平台兼容
120
167
 
@@ -4,12 +4,15 @@
4
4
 
5
5
  按名称/编号/上级组织查分部(subcompany)与部门(department)、按组织节点 id 取详情、按多级路径逐级收敛查询时使用。全部为只读操作。
6
6
 
7
+ 若用户给的是「**多维名称 + 部门/分部名称**」(例如「1号维度下的第一团队」),**不要**自己先查维度再查组织——直接用 `hrm.org.resolve` 一次调用(见本文末尾「多维解析」)。
8
+
7
9
  ## 输入要点
8
10
 
9
11
  | operation | 必填 | 说明 |
10
12
  | --- | --- | --- |
11
13
  | `hrm.org.query` | 至少一个收敛条件 | 按名称/编号/上级组织查询组织(`type` 区分分部/部门) |
12
14
  | `hrm.org.detail` | `id` | 按组织节点 id 取组织详情(类型由服务端自动判断,含全路径 `fullPath`、上级部门名、所属分部名;**不含人员统计**) |
15
+ | `hrm.org.resolve` | `virtual` + `name` | 多维名称 + 部门/分部名称 → 解析组织(精确优先/包含模糊兜底/近似只提示,歧义回候选) |
13
16
 
14
17
  ### `hrm.org.query` 关键字段
15
18
 
@@ -65,6 +68,106 @@ weaver-work-cli --json hrm run hrm.org.query --input-json '{"subcompany":["10000
65
68
  weaver-work-cli --json hrm run hrm.org.detail --input-json '{"id":"1000000000000000101"}'
66
69
  ```
67
70
 
71
+ ## 多维解析(`hrm.org.resolve`)
72
+
73
+ > 多维清单(维度名 + id)**不单独暴露成 operation**,全部由 `hrm.org.resolve` 内部获取与处理:匹配时用它、不存在时把 `availableVirtuals` 随结果回给用户。
74
+
75
+ ### 为什么需要它
76
+
77
+ E10 组织树按**多维**(虚拟组织维度)切分:「行政组织」是真实组织树,其余是各业务维度(「1号维度」「备份维度」…)。**同名部门/分部在不同维度下是不同节点**,浏览接口 `department`/`subcompany` 不带 `companyId` 时会**默认落到「行政组织」维度**(实测:按名称查到的 `virtualid` 全是 `1`)。所以「按名称找部门」必须先定位多维 id,再以 `companyId` 收敛。
78
+
79
+ 这段编排(取维度 → 匹配维度名 → 取多维 id → 带 `companyId` 查组织 → 匹配组织名)**已全部实现在 CLI 内**,Agent **只调一次 `hrm.org.resolve`**,不需要自己分两步推理(也不存在"先列维度再查组织"的第二步可用)。
80
+
81
+ ### 入参
82
+
83
+ | 字段 | 必填 | 说明 |
84
+ | --- | --- | --- |
85
+ | `virtual` | 首调必填 | 多维名称(如 `行政组织` / `1号维度`);精确优先,未命中按**包含**模糊匹配 |
86
+ | `name` | 首调必填 | 部门或分部名称;精确优先,未命中按**包含**模糊匹配 |
87
+ | `type` | 否 | `department` 部门 / `subcompany` 分部;**不传时同时检索两者、按部门优先定位**,并把同名另一类型节点回在 `alsoMatched` |
88
+ | `virtualId` | 复调用 | 多维 id(长整型字符串);用户确认后复调直接传,跳过维度名称匹配 |
89
+ | `orgId` | 复调用 | 组织节点 id(长整型字符串);用户确认后复调直接传,跳过名称匹配(改走组织详情) |
90
+ | `maxCandidates` | 否 | 歧义时最多回传的候选条数,**1~200,默认 20**;超限抛 `number_invalid` |
91
+
92
+ 首调至少要有 `virtual` + `name`;只给 `virtualId` + `orgId` 也可以(纯 id 定位)。缺 `virtual`/`virtualId` 抛 `virtual_required`,缺 `name`/`orgId` 抛 `name_required`。
93
+
94
+ ### 匹配规则(两级同名匹配,三级判定)
95
+
96
+ 名称匹配分**三级**,它们的「能否自动往下走」完全不同:
97
+
98
+ | 级别 | 判定方式 | CLI 行为 |
99
+ | --- | --- | --- |
100
+ | ① 精确 | 忽略大小写与多余空白的**全等**(服务端条件 `eq`/等于) | 唯一 → 继续;多个 → `ambiguous` |
101
+ | ② 包含(模糊) | 名称是关键字**子串**(服务端条件 `in`/包含);返回行再做一次客户端「忽略大小写全等」优先,兜住服务端 `eq` 漏判(全角/空格差异) | 唯一 → 继续;多个 → `ambiguous` |
102
+ | ③ **近似** | 编辑距离阈值内(`相似度 ≥ 0.6`,只认**打字/口误级**差异,如「客服维度」→「客户维度」) | **只回 `suggestions` + `status: not_found`,绝不自动继续** |
103
+
104
+ - ①② 属于系统收敛,命中即可往下走;③ **绝不参与解析**,只能作为「是不是指这个?」的提示交回用户。
105
+ - 维度级:③ 在**本地全量维度清单**上算相似度(`listCompanyVirtual` 一次返回全部)。
106
+ - 组织级:③ 用「关键字**末 2 字 / 首 2 字**」各做一次包含查询(≤2 次,中文名后缀信息量最大:经理/部/科/中心…),命中即作为 `suggestions` 回传。
107
+ - 未命中且无近似项时,组织级回 `availableVirtuals`(仅维度级)或提示补充关键字。
108
+
109
+ ### 结果契约(🔴 只看 `data.status`,不要只看 `ok`)
110
+
111
+ 三种结果都是 `ok: true`、退出码 `0`:
112
+
113
+ | `data.status` | 附带字段 | Agent 该做什么 |
114
+ | --- | --- | --- |
115
+ | `resolved` | `org`(`id`/`name`/`type`/`fullPath`/`parentPath`/`parentId`/`subcompanyId`/`virtualId`/`virtualName`/`link` 等)、`virtual`、`matchType`(`exact`/`fuzzy`/`id`);不传 `type` 且存在**同名另一类型**节点时另回 `alsoMatched[]` | 直接用 `org` 回答,按 `[名称](link)` 呈现;**有 `alsoMatched` 时必须一并告知用户**(如同一客户下既有同名部门又有同名分部) |
116
+ | `ambiguous` | `stage`(`virtual`=多维歧义 / `org`=组织歧义)、`virtual`、`candidates[]`、`candidateTotal`、`truncated`、`message` | **停下问用户**:把 `candidates` 列表(名称 / `fullPath` / link)给用户选,**禁止自动取第一条** |
117
+ | `not_found` | `stage`、`virtual`、`suggestions[]`/`suggestionTotal`(近似名称)、`availableVirtuals`(`stage=virtual` 时)、`message` | **原样转述给用户**(含"不存在"这一事实 + 近似名称 + 可用多维),**禁止自行替换名称后重试**;用户确认后再用 `virtualId`/`orgId` 复调 |
118
+
119
+ - `candidates` 每项为 `{id, name, type, fullPath, code?, link}`;**默认最多 20 条**,`truncated: true` 表示还有更多。`candidateTotal` 是服务端匹配总数(模糊时可能大于所列条数)。
120
+ - 要把候选一次列全:用 `maxCandidates` 复调(1~200),如 `{"virtual":"客户维度","name":"客户经理","maxCandidates":100}` → `candidateTotal: 29, truncated: false`。上游浏览分页会同步放宽到 `max(100, maxCandidates)`,因此上限 200 内都能取全。
121
+ - **`suggestions`(`not_found` 才可能出现)**:近似名称,**最多 5 条**;维度级每项 `{id, name}`,组织级每项与 `candidates` 同结构。`suggestionTotal` 为该级近似匹配总数(组织级来自宽松探测)。
122
+ - 🔴 **它只是给用户看的提示,不是给 Agent 用的参数**:不得据此改名重试,也不得因此省略「用户给的名称不存在」这一事实。
123
+ - 实测:`{"virtual":"客服维度","name":"云桥测试"}` → `not_found` + `suggestions: [{id:"100001569000010000", name:"客户维度"}]` + 5 个可用多维;正确回复是「本租户没有『客服维度』,最接近的是『客户维度』,要用它继续查吗?」,而**不是**直接返回客户维度下的结果。
124
+ - `fullPath` 含多维名并逐级到本节点(如 `1号维度/超级组织66/第一团队`),同名不同层级靠它区分。
125
+ - ⚠️ **不同租户上游的层级分隔符不一致**(实测:木林泉用 `/`、泛微网络租户的 `supDepartment` 用 `|`);CLI 已统一归一化为 `/`,所以 `fullPath`/`parentPath` 跨环境格式一致。需要精确定位时用 `id`/`parentId`,不要反解析字符串。
126
+ - 直属多维根节点的候选 `fullPath` 就是名称本身(无上级路径),可用于识别「标准节点 vs 各客户下的同名子节点」。
127
+ - **`alsoMatched`(resolved 才可能出现)**:不传 `type` 时,若同一多维下**既有一个同名部门、又有一个同名分部**,本操作不会静默二选一 —— 按部门优先给出 `org`,同时把另一类型节点放进 `alsoMatched`(结构与 `candidates` 相同,含 `id`/`type`/`fullPath`/`link`),并在 `message` 里提示。**Agent 必须把两者都告诉用户**,用户要另一个就用它的 `id` 当 `orgId` 复调(或显式传对应 `type`)。要避免这种双命中,直接在首调传 `type`。
128
+
129
+ ### 用户确认后的复调
130
+
131
+ 把候选的 `id` 作为 `orgId` 传回;若是**多维**歧义(`stage: "virtual"`),把维度的 `id` 作为 `virtualId` 传回:
132
+
133
+ ```powershell
134
+ weaver-work-cli --json hrm run hrm.org.resolve --input-json '{"virtual":"1号维度","name":"第一团队","orgId":"9163142909607938"}'
135
+ ```
136
+
137
+ `not_found` 时若用户**确认**了 `suggestions` 里的近似名称,同样复调:维度近似 → 传 `virtualId`;组织近似 → 传 `orgId`(或按用户确认后的准确名称重查一次)。**但确认之前绝不能自己走这一步。**
138
+
139
+ 复调一次即定位,**不要再用名称反复重试**。
140
+
141
+ ### 命令示例
142
+
143
+ 首调(多维名称 + 部门名称;分部同理,传 `"type":"subcompany"` 或省略让它自动识别):
144
+
145
+ ```powershell
146
+ weaver-work-cli --json hrm run hrm.org.resolve --input-json '{"virtual":"1号维度","name":"第一团队"}'
147
+ ```
148
+
149
+ macOS/Linux(bash/zsh):
150
+
151
+ ```bash
152
+ printf '%s\n' '{"virtual":"1号维度","name":"第一团队"}' | weaver-work-cli --json hrm run hrm.org.resolve --input -
153
+ ```
154
+
155
+ 多维名不存在时(自动给出近似名称 + 该租户全部多维,不自动继续):
156
+
157
+ ```powershell
158
+ weaver-work-cli --json hrm run hrm.org.resolve --input-json '{"virtual":"客服维度","name":"云桥测试"}'
159
+ ```
160
+
161
+ ### 注意
162
+
163
+ - 覆盖关系:`hrm.org.resolve` 是「多维 + 名称」的**一步到位**入口;已有明确收敛条件(编号 `code`、上级组织 id 等)或已知组织 id 时,仍用 `hrm.org.query` / `hrm.org.detail`。
164
+ - 多维清单来自 `/api/bs/hrm/companyVirtual/listCompanyVirtual`(一次返回全量,无分页);`行政组织` 也在清单里(id 为 `1`)。
165
+ - 🔴 **「列多维」暂不支持,且不暴露入口**:`hrm.org.virtuals` 已下线(`hrm schema --full` 的 `withheldOperations` 中有声明),Agent 拿不到独立的维度清单接口。
166
+ - `not_found.availableVirtuals` 是**纠错辅助**(用户给的名字对不上时,顺手告知本租户有哪些维度),不是列维度能力——**不要故意构造一个不存在的维度名去套它**。
167
+ - 用户明确问「这个租户有哪些多维」→ 直接回答**暂不支持**,请其改用「维度名 + 组织名」查询。
168
+ - 维度 id 的唯一来源:`not_found.availableVirtuals`(全量)或维度歧义时的 `candidates`。
169
+ - 名称匹配不做拼音/别名/简称展开(`shortname` 只回显不参与匹配)。
170
+
68
171
  ## 多级路径查询(drill-down 编排)
69
172
 
70
173
  路径形如 `总部/研发部/产品组`,逐级用「父节点 id 作为上级条件 + 下一段名称」调用 `org.query`:
@@ -88,11 +191,14 @@ weaver-work-cli --json hrm run hrm.org.detail --input-json '{"id":"1000000000000
88
191
  - 分部与部门是两个不同接口(`browser/data/subcompany` 与 `browser/data/department`),CLI 用 `type` 区分;不传 `type` 默认查部门。
89
192
  - `org.detail` 详情查询**只需传 `id`**,服务端按记录自动判断分部/部门,无需传 `type`。
90
193
  - 组织节点 id 是长整型,按字符串传递。
91
- - 浏览按钮行含 `title`(`名称|全路径`),可直接用于路径确认/重建。
194
+ - 浏览按钮行含 `title`(`名称|上级路径`),行上另有 `supDepartment`(部门)/ `supSubDepartment`(分部)给同一信息;本节点全路径由 CLI 合成在 `fullPath`(`上级路径/名称`)。
195
+ - `hrm.org.resolve` 的行内字段还含 `virtualid`(所属多维 id)、`subcompanyid`(所属分部 id)、`hasSub`(是否有下级),已投影进 `org`。
92
196
 
93
197
  ## 失败处理
94
198
 
95
199
  - `empty_condition`:空条件拉取被拦截,先询问用户补条件。
96
200
  - `enum_invalid`:`type` 取值非法(仅 `subcompany`/`department`)。
97
201
  - `permission_denied`(`code=403`):HRM 读接口开关未开启,提示用户联系管理员开启。
202
+ - `virtual_required`/`name_required`:`hrm.org.resolve` 少传了多维(`virtual`/`virtualId`)或名称(`name`/`orgId`)。
203
+ - **「未找到 / 命中多个」不是错误**:`hrm.org.resolve` 仍 `ok: true`、退出 0,按 `data.status` 分派(`not_found` / `ambiguous`),不要当异常重试。
98
204
  - 认证类错误:引导用户执行 `weaver-work-cli auth login`。
@@ -15,7 +15,8 @@ dependencies:
15
15
  cliHelp: "weaver-work-cli contract --help"
16
16
  ---
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
+ **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
19
20
  认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
20
21
  所有命令通过 `weaver-work-cli --json contract run <operation>` 执行:简单 JSON 优先传 `--input-json '<json>'`,复杂或多行 JSON 先写入 UTF-8 文件再传 `--input <path>`,只有确认当前 shell 能稳定传管道时才使用 `--input -`。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段;**references 是第一信息源**,`weaver-work-cli contract schema` 是 operation、字段和风险等级的合约来源。
21
22
  命令示例、提示词和临时说明必须同时兼容 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 写法。
@@ -15,7 +15,7 @@ dependencies:
15
15
  cliHelp: "weaver-work-cli jiuchuanhui --help"
16
16
  ---
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
19
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
20
20
 
21
21
  认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;请求头三件套由 CLI 统一注入(唯一权威声明见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md) 的「请求头契约」章节),业务调用方不得覆盖,也不得在业务 JSON 中传入凭证类字段。禁止直接读取、列出、打印或解析用户主目录下的 `.e10-cli`、auth、config 或 Keychain 数据。
@@ -15,7 +15,7 @@ cliHelp: "weaver-work-cli ehr --help"
15
15
 
16
16
  # 泛微聚才林人事云
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
19
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
20
20
 
21
21
  本技能覆盖聚才林业务域:**人事档案(hr)**、**出勤管理(attend)**、**薪酬管理(salary)**、**招聘(recruit,读 + 写)**。招聘写操作走 prepare→apply 确认协议;撤销类写操作不实现,原因见 [`references/safety-boundaries.md`](references/safety-boundaries.md)。
@@ -15,7 +15,7 @@ dependencies:
15
15
  cliHelp: "weaver-work-cli mail --help"
16
16
  ---
17
17
 
18
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
18
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
19
19
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
20
20
 
21
21
  认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
@@ -2,10 +2,10 @@
2
2
  name: weaver-e10-meeting
3
3
  display_name: 泛微E10会议管理
4
4
  display_name_en: Weaver E10 Meeting Management
5
- description: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动做会议室与参会人冲突检测),会议改期/换地点/改参会人、取消、删除;[会议室]-查询会议室与占用/空闲情况;[参会与回执]-查参会人名单、填写/更新会议回执;[签到]-查签到与签退情况、补签、补签退、清除签到记录;[会议资料]-会议议题(查看/更新/删除)、议题类型、会议纪要查询、会议类型与应用设置。认证与会话由 weaver-e10-shared 提供。"
6
- description_zh: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动做会议室与参会人冲突检测),会议改期/换地点/改参会人、取消、删除;[会议室]-查询会议室与占用/空闲情况;[参会与回执]-查参会人名单、填写/更新会议回执;[签到]-查签到与签退情况、补签、补签退、清除签到记录;[会议资料]-会议议题(查看/更新/删除)、议题类型、会议纪要查询、会议类型与应用设置。认证与会话由 weaver-e10-shared 提供。"
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 and application settings. Auth and session are provided by weaver-e10-shared."
8
- version: 2.6.0
5
+ description: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动做会议室与参会人冲突检测),会议改期/换地点/改参会人、取消、删除;[会议室]-查询会议室与占用/空闲情况;[参会与回执]-查参会人名单、填写/更新会议回执;[签到]-查签到与签退情况、补签、补签退、清除签到记录;[会议资料]-会议议题(查看/更新/删除)、议题类型、会议纪要查询、会议类型与应用设置、会议决议发布与决议任务跟踪。认证与会话由 weaver-e10-shared 提供。"
6
+ description_zh: "泛微 E10 会议管理,帮您处理会议日常事务:[会议]-查询今天/本周/我的会议与会议详情,预约建会(自动做会议室与参会人冲突检测),会议改期/换地点/改参会人、取消、删除;[会议室]-查询会议室与占用/空闲情况;[参会与回执]-查参会人名单、填写/更新会议回执;[签到]-查签到与签退情况、补签、补签退、清除签到记录;[会议资料]-会议议题(查看/更新/删除)、议题类型、会议纪要查询、会议类型与应用设置、会议决议发布与决议任务跟踪。认证与会话由 weaver-e10-shared 提供。"
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.11.0
9
9
  author: 泛微网络科技股份有限公司
10
10
  agent_created: true
11
11
  requires:
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli meeting --help"
17
17
 
18
18
  # 泛微 E10 会议管理 Skill(双模式:标准版 + EB 版)
19
19
 
20
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
20
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
21
21
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
22
22
 
23
23
  凭证边界:所有 E10 调用凭证一律由 `weaver-work-cli` 的登录托管凭据(`auth` 命令/profile 体系)提供,禁止硬编码任何密钥,禁止向用户索取 Cookie、ETEAMSID、Token 或密码。
@@ -32,7 +32,8 @@ cliHelp: "weaver-work-cli meeting --help"
32
32
  - 签到:「谁签到了」「签到率多少」「张三签到了吗」「帮他补签」「补签退」「清掉误签」
33
33
  - 回执:「帮我回执不参加」「谁还没回执」「回执情况」
34
34
  - 会议室/类型查询:「有哪些会议室」「会议室占用情况」「有哪些会议类型」
35
- - EB 版独有(仅 mode=eb):「会议议题」「议题类型」「会议纪要」「上会申请」「应用设置」
35
+ - EB 版独有(仅 mode=eb):「会议议题」「议题类型」「会议纪要」「上会申请」「应用设置」「会议决议」「决议任务」
36
+ - **会议决议 / 决议任务**:「把这次会议的决议落到系统里」「生成会议任务」「这次会议定了哪些事要谁做」「我负责的会议任务完成了吗」→ 见「命令表(EB 版)」的决议区块(**用 `meeting.eb.decision.publish` 一步完成**)
36
37
  - **不触发**(转对应 Skill):日程/日历类 → `weaver-e10-calendar`;审批流程发起 → `weaver-e10-workflow`;人员/部门查询 → `weaver-e10-hrm`。
37
38
 
38
39
  ## 认证与请求头契约
@@ -66,7 +67,7 @@ cliHelp: "weaver-work-cli meeting --help"
66
67
  - 「补签 / 帮他补上签到」→ 先 `meeting.sign.list` 定位记录 → `meeting.sign.mark.prepare` → 确认后 `apply`;「补签退」用 `meeting.sign.back.prepare`。二者会改写签到事实,必须用户明确确认。
67
68
  - 「清除签到记录 / 撤销签到」→ `meeting.sign.clear.prepare` → 确认后 `apply`。
68
69
  - 「我要签到 / 扫码签到」→ **CLI 不支持**(依赖现场二维码票据 qrticket 与设备 IP),引导用户现场扫码或走 H5 签到;**绝不代签**。
69
- - **EB 模式(mode=eb)下,同一意图改用 EB operations**(见「命令表(EB 版)」):今天的会议 → `meeting.eb.meeting.list`(先 count 再 list);建会 → 先读 `meeting.eb.baseSet.get` 判断是否需走流程,再 `meeting.eb.meeting.create.prepare`(**prepare 内部自动执行会议室/参会人冲突检测**:命中禁止提交 → `conflict_rejected` 直接停止;仅提醒 → 只写入 `warnings`,建议换时间/换地点,不提供绕过选项);变更/取消 → `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`。
70
+ - **EB 模式(mode=eb)下,同一意图改用 EB operations**(见「命令表(EB 版)」):今天的会议 → `meeting.eb.meeting.list`(先 count 再 list);建会 → 先读 `meeting.eb.baseSet.get` 判断是否需走流程,再 `meeting.eb.meeting.create.prepare`(**prepare 内部自动执行会议室/参会人冲突检测**:命中禁止提交 → `conflict_rejected` 直接停止;仅提醒 → 只写入 `warnings`,如实告知 + 建议换时间/换地点,是否继续由用户决定(不主动建议忽略冲突));变更/取消 → `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`。
70
71
 
71
72
  ## 命令表(标准版,仅 mode=standard 使用)
72
73
 
@@ -89,6 +90,7 @@ cliHelp: "weaver-work-cli meeting --help"
89
90
  | 签到记录与统计 | `meeting.sign.list` | [meeting-receipts-signs.md](references/meeting-receipts-signs.md) |
90
91
  | 补签 / 补签退 | `meeting.sign.mark.prepare` → `apply` / `meeting.sign.back.prepare` → `apply` | [meeting-receipts-signs.md](references/meeting-receipts-signs.md) |
91
92
  | 清除签到记录 | `meeting.sign.clear.prepare` → `apply` | [meeting-receipts-signs.md](references/meeting-receipts-signs.md) |
93
+ | 生成对象详情页链接(会议/会议室/签到…) | `meeting.link`(**禁止手工拼 URL**) | [meeting-eb.md](references/meeting-eb.md) |
92
94
 
93
95
  ## 命令表(EB 版,仅 mode=eb 使用)
94
96
 
@@ -111,21 +113,32 @@ cliHelp: "weaver-work-cli meeting --help"
111
113
  | EB 议题类型列表 / 详情 / 更新 / 删除 | `meeting.eb.topicType.list` / `.detail` / `.update` / `.delete` | [meeting-eb.md](references/meeting-eb.md) |
112
114
  | EB 会议议题列表 / 详情 / 更新 / 删除 | `meeting.eb.topic.list` / `.detail` / `.update` / `.delete` | [meeting-eb.md](references/meeting-eb.md) |
113
115
  | EB 应用设置(判断审批/流程建会) | `meeting.eb.baseSet.get` | [meeting-eb.md](references/meeting-eb.md) |
116
+ | **EB 发布会议决议**(写决议 + 自动把会议标为已决议) | **`meeting.eb.decision.publish.prepare` → `apply`** | [meeting-eb.md](references/meeting-eb.md) |
117
+ | EB 决议列表 / 详情 / 删除 | `meeting.eb.decision.list` / `.detail` / `.delete.prepare` → `apply` | [meeting-eb.md](references/meeting-eb.md) |
118
+ | EB 决议任务列表(按会议 / 执行人 / 状态) | `meeting.eb.decisionTask.list` | [meeting-eb.md](references/meeting-eb.md) |
119
+ | EB 更新决议任务完成状态 | `meeting.eb.decisionTask.update.prepare` → `apply` | [meeting-eb.md](references/meeting-eb.md) |
120
+ | EB 补签 / 补签退(自动定位签到记录,走更新) | `meeting.eb.sign.mark.prepare` → `apply` | [meeting-eb.md](references/meeting-eb.md) |
114
121
  | EB 会议室 / 参会人冲突检测(只查不建) | `meeting.eb.conflict.room` / `.member` | [meeting-eb.md](references/meeting-eb.md) |
122
+ | EB 详情页链接(会议/会议室/占用/签到/回执/纪要/议题/设置) | `meeting.link`(按 `type` 解析 objid 并缓存) | [meeting-eb.md](references/meeting-eb.md) |
123
+ | EB 传参口径(人员传 **HRM 员工 id**,非 E10 userId;日期 `yyyy-MM-dd HH:mm`) | — | [meeting-eb.md](references/meeting-eb.md) |
124
+
125
+ > **给验证方(其他智能体)**:需要"验证所有会议功能"时,直接交付 [meeting-verification.md](references/meeting-verification.md)
126
+ > —— 内含全部 **99 个 operation**(标准版 28 + EB 版 70 + 跨模式 1)的逐条判据、写链路模板、14 个负向用例、
127
+ > 8 项不在范围的功能清单,以及可直接粘贴的验证提示词与回执模板。
115
128
 
116
129
  ## 处理链:预约会议(高风险写,强制确认链)
117
130
 
118
131
  1. **环境模式确定(强制第一步)**:跑 `meeting.env.detect`(默认读缓存,`refresh:true` 强制刷新);`mode=eb` → 本处理链改用 EB operations:先 `meeting.eb.baseSet.get` 读 `only_flow_create`/`open_mt_approve` 判断是否需走流程(需走 → 提示走 workflow,CLI 不直接建会),再 `meeting.eb.meeting.create.prepare`;`env_unavailable` → 提示并停止。
119
132
  2. 解析意图:名称 / 时间(`yyyy-MM-dd HH:mm`)/ 会议室 / 参会人 / 类型;缺失字段先向用户确认,**禁止字段未确认直接建会**。
120
133
  3. `meeting.room.list`(带时间范围)推荐空闲会议室、`meeting.type.list` 推荐类型,交用户点选。
121
- 3. `meeting.create.prepare`:自动执行建会路径检查(`onlyFlowCreate=1` 或周期工作流 → 拒绝并提示走流程)与**强制冲突检测**(接口失败视为冲突;`cansub=false` 直接拒绝;`cansub=true` 有冲突描述 → warnings 如实告知并建议换时间/地点,**但不阻止提交**:用户了解冲突后仍要求新建时可继续 `apply`)。
134
+ 3. `meeting.create.prepare`:自动执行建会路径检查(`onlyFlowCreate=1` 或周期工作流 → 拒绝并提示走流程)与**强制冲突检测**(接口失败视为冲突;`cansub=false` 直接拒绝;`cansub=true` 有冲突描述 → warnings 如实告知并建议换时间/地点,**但不阻止提交**,是否继续由用户决定;CLI 不主动建议忽略冲突)。
122
135
  4. 向用户摘要 preview(含 caller/contacter 默认当前用户、周期 `repeatDesc` 自动拼接)。
123
136
  5. 用户明确确认 → `meeting.create.apply`(`confirm: true` + continuation,**10 分钟内有效,过期重新 prepare**)。
124
- 6. 结果回读用 `meeting.list`,会议链接由 Agent 按 `{baseUrl}/sp/meeting/meetingSingle?meetingId={id}` 内联输出。
137
+ 6. 结果回读用 `meeting.list`;会议链接一律用 `meeting.link` 生成(**禁止手工拼 URL**:EB 版 objid 需动态解析,标准版会议室/会议类型没有单页),再按 `[名称](url)` **内联到名称单元格**输出。
125
138
 
126
139
  ## 处理链:变更 / 取消 / 删除会议(高风险写,强制确认链)
127
140
 
128
- 1. 先用 `meeting.list`(或用户给出的会议 id)定位目标会议,必要时把 `[名称]({baseUrl}/sp/meeting/meetingSingle?meetingId={id})` 给用户核对。
141
+ 1. 先用 `meeting.list`(或用户给出的会议 id)定位目标会议,必要时用 `meeting.link` 生成 `[名称](url)` 给用户核对(EB 环境会议也在 `meeting.eb.meeting.list`)。
129
142
  2. `meeting.change.prepare`(变更)/ `meeting.cancel.prepare` / `meeting.delete.prepare`(入参 `id`):CLI 先**回查会议存在性**;`change` 还会按会议状态自动决定 `operateType`(草稿=UPDATE、正常=CHANGE)。**权限判定交给服务端**,CLI 不做权限预判。成功返回 `preview` + `continuation`(10 分钟有效)。
130
143
  3. 向用户摘要动作与后果(变更=覆盖所提交字段、当前状态与分流类型;取消=会议进入取消状态、占用/回执/签到失效;删除=**移入回收站**、不再出现在正常列表),**取得明确确认**。变更只提交 preview 中列出的字段。
131
144
  4. 用户确认 → `meeting.*.apply`(`confirm: true` + continuation)。
@@ -136,6 +149,7 @@ cliHelp: "weaver-work-cli meeting --help"
136
149
 
137
150
  - 最小必要查询;列表结果默认摘要输出,不粘贴超长 JSON。
138
151
  - 长 id(`address`/`mtId`/`hrmMembers` 等)一律字符串传递(超 2^53 数字会失真)。
152
+ - **可点击链接一律内联到名称单元格**(`[会议名称](url)`),由 `meeting.link` 生成:**禁止**手工拼 URL,也**禁止**单列「详情链接」一行。
139
153
  - **服务端业务/权限提示必须原文转达用户**:如"您没有变更权限!""您没有取消权限!""您没有删除权限!""您没有读取权限!"——不得改写成模糊说法,也不得建议用户绕过 CLI 自行拼接口。
140
154
  - 错误驱动:`error.type/subtype` 决定下一步(`session_expired` → 登录流程;`conflict_rejected` → 停止;`confirmation.required` → 补 confirm;`meeting_not_operable` → 核对会议 id 与可见性)。
141
155
 
@@ -151,7 +165,9 @@ cliHelp: "weaver-work-cli meeting --help"
151
165
  - 禁止绕过 CLI 直接 `curl`/`fetch` E10 接口;禁止读取认证目录与 Cookie。
152
166
  - **历史变更**:旧 `meeting.update.*` 已下线(它固定发送 `operateType=UPDATE`,与业务语义不符),改由 `meeting.change.*` 按会议状态自动分流;迁移说明见 [meeting-update.md](references/meeting-update.md)。
153
167
  - **提前结束会议(meeting.over)不提供**:服务端接口为空实现(源码中 service 调用被注释、直接返回成功),调用只会得到"假成功";请引导用户在系统页面操作,禁止绕过 CLI 自行拼接口。
154
- - **EB 版已实现**(`meeting.eb.*`,覆盖会议/会议室/占用/签到/回执/纪要/会议类型/议题类型/会议议题/应用设置的全部 interfacePk):`mode=eb` 时必须使用它们,**不要**再回答"EB 版未实现"。注意**标准版会议本身没有议题/纪要能力**(EB 版才有)——若当前是 standard 模式而用户问议题/纪要,如实说明属 EB 版能力(EB 环境下才可查)。
168
+ - **EB 版已实现**(`meeting.eb.*`,覆盖会议/会议室/占用/签到/回执/纪要/会议类型/议题类型/会议议题/应用设置/**会议决议与决议任务**的全部 interfacePk):`mode=eb` 时必须使用它们,**不要**再回答"EB 版未实现"。注意**标准版会议本身没有议题/纪要能力**(EB 版才有)——若当前是 standard 模式而用户问议题/纪要,如实说明属 EB 版能力(EB 环境下才可查)。
169
+ - **⚠️ EB 返回值解析(真机踩坑,必看)**:EB 接口里**人员 / 关联 / 状态 / 选择类字段返回的是「对象数组」**(如 `[{"name":"崔智友","id":"1305319807700025376"}]`),**不是字符串** —— 取 id 读 `[0].id`、显示名读 `[0].name`;**禁止**把整个数组当字符串拼接(会显示成 `System.Object[]`,看起来像"字段为空")。已实测这类形态:`executors` / `rummager` / `mt_id` / `relate_decision` / `decision_status` / `detail1[].executor`;而 `finish_status`("未完成"/"已完成")、日期、`id` 是字符串。另注意 **`sign.list` 返回的 `mt_id` 是「会议室/会议名称」而筛选参数 `mt_id` 才是会议 id**。
170
+ - **⚠️ EB 写操作失败语义(真机踩坑,必看)**:**EB 写接口"报错"≠"没有写入"** —— 实测 `create_mt_decision` 因字段校验失败返回错误时,主表与明细其实**已经落库**,重试产生了重复数据。因此写操作失败后**必须先回查**(list/detail)再决定重试或删除;CLI 的语义化写操作(`decision.publish`、`sign.mark`)在拿不到明确成功证据时会抛 **`partial`** 并提示"先回查、勿盲目重试",请如实转达用户。
155
171
  - EB 版纪要**创建**未实现(该功能走 OpenAPI、无自定义 interfacePk),仅支持 `meeting.eb.minute.list` 查询。
156
172
  - 周期会议走工作流(`repeatWorkFlowBaseIds` 非空)与 `onlyFlowCreate=1` 的流程建会需要工作流集成,CLI 会主动拒绝。
157
173
  - **冲突处置严格按应用设置,CLI 不额外加码**:`=1`「禁止提交」→ 怎么都不允许提交(抛 `conflict_rejected`,不询问、不新建);`=0`「仅提醒」→ 如实告知冲突并建议换时间/换地点,**但不阻止提交** —— 用户了解冲突后仍要求新建时,可继续 `apply` 完成建会。**检测失败 → `conflict_check_failed` 拒绝**(策略无法判定时保守处理)。