weaver-work-cli 0.1.20 → 0.1.21

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 (59) 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/workflow/host.js +5 -1
  17. package/dist/shortcuts/workflow/operations/form.js +95 -11
  18. package/dist/shortcuts/workflow/operations/read.js +785 -26
  19. package/docs/e10-auth.md +4 -2
  20. package/docs/hrm.md +34 -2
  21. package/package.json +2 -2
  22. package/scripts/xiaoe_env.py +118 -0
  23. package/skill-template/domains/hrm.md +2 -1
  24. package/skill-template/skill-template.md +1 -1
  25. package/skills/weaver-e10-blog/SKILL.md +1 -1
  26. package/skills/weaver-e10-caizhilian/SKILL.md +5 -4
  27. package/skills/weaver-e10-caizhilian/references/file-collection.md +37 -0
  28. package/skills/weaver-e10-caizhilian/references/folder.md +5 -1
  29. package/skills/weaver-e10-caizhilian/references/setting-attach.md +35 -5
  30. package/skills/weaver-e10-caizhilian/references/source-manifest.json +620 -5
  31. package/skills/weaver-e10-calendar/SKILL.md +1 -1
  32. package/skills/weaver-e10-ebuilder-form/SKILL.md +1 -1
  33. package/skills/weaver-e10-esb/SKILL.md +1 -1
  34. package/skills/weaver-e10-hrm/SKILL.md +52 -5
  35. package/skills/weaver-e10-hrm/references/org.md +107 -1
  36. package/skills/weaver-e10-jinchengda/SKILL.md +2 -1
  37. package/skills/weaver-e10-jiuchuanhui/SKILL.md +1 -1
  38. package/skills/weaver-e10-jucailin/SKILL.md +1 -1
  39. package/skills/weaver-e10-mail/SKILL.md +1 -1
  40. package/skills/weaver-e10-meeting/SKILL.md +1 -1
  41. package/skills/weaver-e10-okr/SKILL.md +1 -1
  42. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  43. package/skills/weaver-e10-plan/SKILL.md +1 -1
  44. package/skills/weaver-e10-qiyecheng/SKILL.md +1 -1
  45. package/skills/weaver-e10-shared/SKILL.md +10 -13
  46. package/skills/weaver-e10-shared/references/e10-auth-and-session.md +11 -17
  47. package/skills/weaver-e10-shared/references/non-interactive-environment.md +21 -14
  48. package/skills/weaver-e10-shijingran/SKILL.md +1 -1
  49. package/skills/weaver-e10-skill-maker/SKILL.md +1 -1
  50. package/skills/weaver-e10-skill-maker/references/weaver-skill-style.md +1 -1
  51. package/skills/weaver-e10-wenshuding/SKILL.md +1 -1
  52. package/skills/weaver-e10-workflow/SKILL.md +19 -19
  53. package/skills/weaver-e10-workflow/references/source-manifest.json +13 -13
  54. package/skills/weaver-e10-workflow/references/workflow-create.md +11 -7
  55. package/skills/weaver-e10-workflow/references/workflow-query.md +9 -14
  56. package/skills/weaver-e10-yepiaotong/SKILL.md +1 -2
  57. package/skills/weaver-e10-yimiaoban/SKILL.md +1 -1
  58. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
  59. package/skills/weaver-e10-ziguanjia/SKILL.md +1 -1
@@ -42,7 +42,7 @@ weaver-work-cli auth whoami
42
42
  ```text
43
43
  weaver-work-cli auth xiaoe
44
44
  ```
45
- CLI 会按“显式 `--base-url` / 宿主 `tokens.py` 脚本结果或 CLI 资料包内置默认域名(地址由资料包提供,不在文档中写死) / XiaoE 环境变量中的首个支持域名 / 当前 profile `config.baseUrl`”解析登录域名。业务命令在未显式指定 `--auth` / `--profile` 时,也会自动优先尝试这一步。若该域名在 XiaoE 支持范围内且凭证有效,会直接保存登录态,`agentType` 固定为 `XiaoE`,然后继续原业务操作。若当前域名不在 XiaoE 支持范围内、客户切换了访问域名,或 XiaoE 凭证校验失败,业务命令必须停止并反馈错误,不得自动沿用旧 profile;`auth xiaoe` 必须先反馈未拿到登录信息的原因,然后再降级打开浏览器 OAuth,降级等待必须遵守下方「浏览器 OAuth 降级防挂起」。Agent 不得因为本地存在旧 profile 就跳过这一步,也不得要求用户提供或展示 `XIAOE_*` / ETEAMSID。
45
+ CLI 会按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile `config.baseUrl` → CLI 内置默认值”解析 E10 登录域名;`XIAOE_DOMAIN` 只作为 XiaoE/erpa 换票服务地址。业务命令在未显式指定 `--auth` / `--profile` 时,也会自动优先尝试这一步。若凭证有效,会直接保存登录态,`agentType` 固定为 `XiaoE`,然后继续原业务操作。若 Web/Linux 返回 `authentication/xiaoe_web_credential_unavailable`,反馈宿主登录态/凭据注入异常后停止,不要自动进入下方浏览器流程,也不要要求用户去本地终端重复登录。Agent 不得因为本地存在旧 profile 就跳过统一登录,也不得要求用户提供或展示 `XIAOE_*` / ETEAMSID。
46
46
 
47
47
  1. **先调用宿主提供的提问 / 弹框能力询问用户**,让用户二选一:
48
48
  - 输入本次要登录的 E10 登录域名(base URL),形如 `https://<企业域名>`;或
@@ -61,17 +61,12 @@ weaver-work-cli auth whoami
61
61
 
62
62
  登录域名一律以用户实际提供为准;拿不到域名前,不要执行任何依赖登录态的业务命令。
63
63
 
64
- ## 浏览器 OAuth 降级防挂起
64
+ ## 浏览器 OAuth 防挂起
65
65
 
66
- `auth xiaoe` / `auth login` 的浏览器 OAuth 降级会在本机 `127.0.0.1:19800` 监听回调并无限等待,命令自身不会超时退出。在 Agent 沙箱/托管环境(没有本地浏览器,或浏览器与 CLI 不在同一台机器/容器)中,外部浏览器无法回调容器内 `127.0.0.1:19800`,该路径结构性不可达,命令会一直挂起直到被外部超时掐断(退出码 124),用户感知为「卡住 / 跑很久」。执行规则:
66
+ `auth login`(以及 macOS/Windows 桌面宿主上的 `auth xiaoe` 降级)会在本机 `127.0.0.1:19800` 监听浏览器回调,最长等待 5 分钟。Agent 沙箱/托管环境中的外部浏览器无法回调容器内地址。执行规则:
67
67
 
68
- 1. 以后台方式运行 `auth xiaoe`,并限时观察(上限 300 秒 / 5 分钟)。一旦输出出现 `Waiting for E10 authorization callback`,说明统一登录已失败、进入浏览器 OAuth 等待,立即终止该进程,不得继续等待。
69
- 2. 终止后先向用户反馈 XiaoE 统一登录失败的实际原因,再按环境处理:
70
- - **沙箱/托管环境**:不要替用户执行浏览器登录等待,把完整命令交给用户在其本地终端执行:
71
- ```text
72
- weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
73
- ```
74
- - **本地环境(CLI 与浏览器同机)**:可继续执行浏览器登录,但仍须限时等待,超时未完成即终止并反馈。
68
+ 1. Web/Linux 中运行 `auth xiaoe` 时,收到 `xiaoe_web_credential_unavailable` 即反馈并停止;不要自动改跑 `auth login`。
69
+ 2. 只有用户明确要求浏览器授权且确认 CLI 与浏览器同机时,才执行 `auth login`;仍须限时等待,超时未完成即终止并反馈。
75
70
  3. 用户无法本地执行浏览器登录时,经用户明确同意后改用保底方式 `weaver-work-cli auth set --eteamsid "<ETEAMSID>" --base-url "<用户确认的登录域名>"`,由用户从已登录浏览器主动提供 ETEAMSID;Agent 不得索取、展示或转述该值。
76
71
  4. 严禁不加限制地前台运行 `auth xiaoe` / `auth login` 并等待 OAuth 回调。
77
72
 
@@ -83,7 +78,7 @@ weaver-work-cli auth whoami
83
78
  weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
84
79
  ```
85
80
 
86
- 在 XiaoE 宿主环境中,`auth xiaoe` 先使用平台注入的 `XIAOE_USER_TOKEN` + `XIAOE_DOMAIN` 换取 ETEAMSID(沙箱唯一可用来源);拿不到时再读宿主 `xiaoeUserData/tokens.py` 的 stdout JSON(仅桌面宿主),再退回内置原生实现读取桌面 XiaoE 客户端会话(`XiaoE/Robots/<id>/user_settings.json`,不需要本机 Python);仍未识别到可用凭证时,才读取 `WEAVER_XIAOE_*` 环境变量里的“当前登录域名 -> ETEAMSID”统一登录映射,并且保存的 `agentType` 固定为 `XiaoE`。如果命令没有显式传入域名,CLI 会优先使用凭证结果中的域名或宿主注入的 `XIAOE_DOMAIN`,再使用 CLI 资料包内置默认域名(地址由资料包提供,不在文档中写死);没有脚本凭证但环境映射可用时,使用 XiaoE 环境变量里的首个支持域名;再没有时才使用当前 profile 配置。XiaoE 凭证校验失败、当前域名不在支持范围内,或用户切换了访问域名时,`auth xiaoe` 必须先反馈未拿到登录信息的原因,然后再降级打开浏览器 OAuth,降级等待必须遵守上方「浏览器 OAuth 降级防挂起」。
81
+ 在 XiaoE 宿主环境中,`auth xiaoe` 先使用平台注入的 `XIAOE_USER_TOKEN` + `XIAOE_DOMAIN` 换取 ETEAMSID(沙箱唯一可用来源):先走 Node 主路径,失败后由 CLI npm 包自带的 `scripts/xiaoe_env.py` 作标准库兼容回退;拿不到时再读宿主 `xiaoeUserData/tokens.py` 的 stdout JSON(仅桌面宿主),再退回内置原生实现读取桌面 XiaoE 客户端会话(`XiaoE/Robots/<id>/user_settings.json`,不需要本机 Python);仍未识别到可用凭证时,才读取 `WEAVER_XIAOE_*` 环境变量里的“当前登录域名 -> ETEAMSID”统一登录映射,并且保存的 `agentType` 固定为 `XiaoE`。`XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址,不能作为 E10 地址;E10 目标按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile → CLI 内置默认值”解析。Node 和 Python 兼容路径都校验业务码及 `data.eteamId`,保留系统 CA 校验,只允许同源重定向或同主机 HTTP→HTTPS 升级。统一登录失败时,Web/Linux 返回 `authentication/xiaoe_web_credential_unavailable`,不自动启动 localhost 浏览器 OAuth;macOS/Windows 桌面宿主才允许自动降级。
87
82
 
88
83
  需要显式表达“XiaoE 优先”的场景也可以使用等价入口:
89
84
 
@@ -91,7 +86,7 @@ weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_ty
91
86
  weaver-work-cli auth xiaoe
92
87
  ```
93
88
 
94
- 该命令先尝试 XiaoE 统一登录;统一登录不可用时,先反馈原因,再降级到浏览器 OAuth(降级等待必须遵守「浏览器 OAuth 降级防挂起」,禁止前台无限等待回调)。用户明确切换域名时再追加 `--base-url "<用户确认的登录域名>"`。
89
+ 该命令先尝试 XiaoE 统一登录;统一登录不可用时先反馈原因。Web/Linux 环境直接结束并返回结构化错误,不自动切换浏览器 OAuth;macOS/Windows 桌面宿主可以继续降级。用户明确切换域名时再追加 `--base-url "<用户确认的登录域名>"`。
95
90
 
96
91
  如果端口冲突:
97
92
 
@@ -118,7 +113,7 @@ weaver-work-cli --profile PROFILE_NAME auth status --no-check
118
113
 
119
114
  通过 `weaver-work-cli run` 执行外部命令时,CLI 会按当前 profile 注入 `WEAVER_BASE_URL`、`WEAVER_ETEAMSID`、`WEAVER_COOKIE`、`WEAVER_USER_AGENT` 和 `WEAVER_AGENT_TYPE`。这些值只给子进程使用,不应在回复或日志中明文展示。
120
115
 
121
- `XIAOE_*` 是平台保留前缀,只由宿主注入给 CLI 消费(`XIAOE_DOMAIN` 业务服务地址、`XIAOE_USER_TOKEN` 业务凭据,均按次注入;`XIAOE_SKILL_*` 为包内目录变量)。本 CLI 自己的宿主集成变量使用自有前缀 `WEAVER_XIAOE_*`,例如 `WEAVER_XIAOE_AUTH_MAP`(JSON 域名映射)、`WEAVER_XIAOE_TOKEN_SCRIPT_PATH`/`WEAVER_XIAOE_TOKEN_SCRIPT_PYTHON`(指定宿主 `tokens.py` 及解释器)、`WEAVER_XIAOE_DEFAULT_DOMAIN`(默认域名);旧名 `XIAOE_E10_AUTH_MAP`、`XIAOE_TOKEN_SCRIPT_PATH` 等仅作兼容别名,新集成一律用 `WEAVER_XIAOE_*`。
116
+ `XIAOE_*` 是平台保留前缀,只由宿主注入给 CLI 消费(`XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址、`XIAOE_USER_TOKEN` 是业务凭据,均按次注入;`XIAOE_SKILL_*` 为包内目录变量)。本 CLI 自己的宿主集成变量使用自有前缀 `WEAVER_XIAOE_*`,例如 `WEAVER_XIAOE_AUTH_MAP`(JSON 域名映射)、`WEAVER_XIAOE_E10_BASE_URL`(E10 目标地址)、`WEAVER_XIAOE_TOKEN_SCRIPT_PATH`/`WEAVER_XIAOE_TOKEN_SCRIPT_PYTHON`(指定宿主 `tokens.py` 及解释器)、`WEAVER_XIAOE_DEFAULT_DOMAIN`(默认域名);旧名 `XIAOE_E10_AUTH_MAP`、`XIAOE_TOKEN_SCRIPT_PATH` 等仅作兼容别名,新集成一律用 `WEAVER_XIAOE_*`。
122
117
 
123
118
  宿主不会注入 ETEAMSID 环境变量,CLI 也不读取 `XIAOE_ETEAMSID`;ETEAMSID 一律由登录链路换取。CLI 支持两类宿主格式:平台注入的 `XIAOE_DOMAIN` + `XIAOE_USER_TOKEN`,以及 `WEAVER_XIAOE_*` 域名映射。这些格式属于宿主集成细节,不作为用户操作步骤;Agent 不要打印、转述、要求用户手动填写或将其导出到当前 shell。
124
119
 
@@ -126,14 +121,13 @@ weaver-work-cli --profile PROFILE_NAME auth status --no-check
126
121
 
127
122
  `auth xiaoe` 或业务命令触发统一登录时,CLI 按以下顺序自行取凭据,Agent **不参与、也不得复现**:
128
123
 
129
- 1. **平台注入凭据**:`XIAOE_USER_TOKEN` + `XIAOE_DOMAIN`(小 e 业务服务地址)。这是沙箱/Linux 环境唯一可用的来源,不依赖桌面客户端与 Python。
130
- 2. **宿主 `tokens.py`**:桌面宿主 `xiaoeUserData/tokens.py`(macOS `~/Library/Application Support/xiaoeUserData/tokens.py`,Windows `%LOCALAPPDATA%\xiaoeUserData\tokens.py`);可用 `WEAVER_XIAOE_TOKEN_SCRIPT_PATH` 指定路径。
124
+ 1. **平台注入凭据**:`XIAOE_USER_TOKEN` + `XIAOE_DOMAIN`(小 e 业务服务地址)。先由 Node 直接换票;失败时 CLI 可调用 npm 包自带的 `scripts/xiaoe_env.py` 兼容换票。脚本不属于 Skill,由 CLI 内部执行、解析并隐藏凭证 stdout。
125
+ 2. **宿主 `tokens.py`**:桌面宿主 `xiaoeUserData/tokens.py`(macOS `~/Library/Application Support/xiaoeUserData/tokens.py`,Windows `%LOCALAPPDATA%\xiaoeUserData\tokens.py`);CLI 在 macOS 应用包与 Windows 按用户/全局安装目录中自动查找 XiaoE 客户端内置 Python,并优先用它执行脚本;可用 `WEAVER_XIAOE_TOKEN_SCRIPT_PATH` 指定脚本路径,用 `WEAVER_XIAOE_TOKEN_SCRIPT_PYTHON` 指定解释器。
131
126
  3. **桌面 XiaoE 客户端会话**:`XiaoE/Robots/<id>/user_settings.json` 的 `session_id` + `erpa`,由 CLI 内置 Node 实现换取 `eteamId`,不需要本机 Python。
132
127
  4. **`WEAVER_XIAOE_*` 环境映射**:当前登录域名到 ETEAMSID 的映射。
133
128
 
134
- Agent 禁止自行执行 `tokens.py` 或任何取 Token 脚本(其 stdout 含 ETEAMSID/Cookie/Token,会进入对话与日志),禁止 `eval` / `Invoke-Expression` `auth export-weaver-env` 的输出,也禁止要求用户粘贴或展示任何凭证。脚本不存在、Python 依赖缺失、stdout 非法或接口失败,都由 CLI 内部记录并降级;Agent 只需把 CLI 反馈的原因转述给用户,不猜测或伪造 Token。
129
+ Agent 禁止自行执行 `tokens.py`、`xiaoe_env.py` 或任何取 Token 脚本(其 stdout 含 ETEAMSID/Cookie/Token,会进入对话与日志),也禁止把这些脚本放入 shared Skill;禁止 `eval` / `Invoke-Expression` `auth export-weaver-env` 的输出,也禁止要求用户粘贴或展示任何凭证。脚本不存在、Python 依赖缺失、stdout 非法或接口失败,都由 CLI 内部记录并降级;Agent 只需把 CLI 反馈的原因转述给用户,不猜测或伪造 Token。
135
130
 
136
131
  ## 安全边界
137
132
 
138
133
  Agent 不要要求用户贴 Cookie、ETEAMSID、业务 Token、app key 或 app secret,也不要直接读取用户机器上的 auth、config 或 Keychain 数据。业务 Skill 只负责调用 CLI;登录态读取、Cookie 拼接、业务 Token 获取和 HTTP header 注入都由 `weaver-work-cli` 内部完成。
139
-
@@ -20,9 +20,19 @@
20
20
 
21
21
  判定不了时一律按**非交互**处理:非交互流程在可交互环境下同样安全,反之则会挂起或卡死。
22
22
 
23
- ## 降级信号判读
23
+ ## 登录失败信号判读
24
24
 
25
- 命令输出中一旦出现下列任一信号,即表示**统一登录未命中、已降级到浏览器 OAuth**,继续等待不会成功:
25
+ Web/Linux 中 `auth xiaoe` 统一登录失败时会直接返回结构化错误:
26
+
27
+ ```text
28
+ error.type = authentication
29
+ error.subtype = xiaoe_web_credential_unavailable
30
+ error.stage = xiaoe_unified_login
31
+ ```
32
+
33
+ 收到该错误后,反馈宿主登录态或凭据注入不可用并停止。不要自动执行 `auth login`,也不要要求用户在本地终端重复执行登录。
34
+
35
+ 只有用户明确要求浏览器授权,或 macOS/Windows 桌面宿主允许 `auth xiaoe` 自动降级时,才可能出现下列浏览器 OAuth 信号:
26
36
 
27
37
  | 降级信号 | 含义 |
28
38
  | --- | --- |
@@ -31,33 +41,30 @@
31
41
  | `Local callback server: http://127.0.0.1:19800/callback` | 回调监听地址;非交互环境下不可达 |
32
42
  | `Could not open browser automatically. Copy the login URL manually.` | 无法自动打开浏览器,且无人可复制 URL 完成授权 |
33
43
 
34
- 出现任一信号时的处置顺序(缺一不可):
44
+ 在非交互环境中出现任一信号时的处置顺序:
35
45
 
36
- 1. **立即终止**该命令(不要等待其自然结束;命令自身不会超时退出)。
46
+ 1. **立即终止**该命令,不要等待本地回调。
37
47
  2. 向用户反馈统一登录未命中的**实际原因**(凭证未取到 / 域名不在支持范围 / 当前域名与凭证不匹配 / CLI 侧能力缺口)。
38
- 3. 非交互环境:不要替用户等待浏览器授权,把完整命令交给用户在其**本地终端**执行:
39
- ```text
40
- weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
41
- ```
42
- 4. 用户无法本地执行时,经用户明确同意后改用保底方式,由用户从已登录浏览器主动提供 ETEAMSID:
48
+ 3. 不自动给出“去本地终端执行”的操作;只有用户明确要求改用浏览器授权时,才说明该方式必须在 CLI 与浏览器同机的环境执行。
49
+ 4. 用户明确要求保底方式时,可说明 `auth set`,但 Agent 不得索取、展示、转述或记录 ETEAMSID:
43
50
  ```text
44
51
  weaver-work-cli auth set --eteamsid "<ETEAMSID>" --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
45
52
  ```
46
53
  Agent 不得索取、展示、转述或记录该值。
47
54
 
48
- ## 显式传域名后仍降级
55
+ ## 显式传域名后仍失败
49
56
 
50
- 宿主已注入域名、域名连通性正常(HTTP 200),但显式传入该域名后仍然降级:
57
+ 显式传入 E10 域名后仍返回统一登录错误:
51
58
 
52
59
  ```text
53
- weaver-work-cli auth xiaoe --base-url "<宿主注入域名>" --agent_type "<当前智能体名称>"
54
- # Open browser login: ... / Waiting for E10 authorization callback...
60
+ weaver-work-cli auth xiaoe --base-url "<用户确认的 E10 域名>" --agent_type "<当前智能体名称>"
61
+ # authentication/xiaoe_web_credential_unavailable
55
62
  ```
56
63
 
57
64
  判定结论与处置:
58
65
 
59
66
  - 域名与网络**不是**失败原因,不要再反复更换域名重试。
60
- - 这属于当前 CLI 版本消费统一登录凭证的能力缺口,技能侧无法修复;按上述「降级信号」流程终止并反馈,同时**记录 CLI 版本**(`weaver-work-cli --version`)便于 CLI 侧定位。
67
+ - 这属于宿主登录态、凭据注入或当前 CLI 版本消费凭证的异常;停止并反馈,同时可记录 CLI 版本(`weaver-work-cli --version`)便于定位。
61
68
  - 不要因为一次降级就断言 CLI 不可用;只读诊断命令(`auth status --no-check`、`doctor --e10`)仍可作为环境检查手段。
62
69
 
63
70
  ## 可写性相关说明
@@ -23,7 +23,7 @@ cliHelp: "weaver-work-cli project --help"
23
23
 
24
24
  ## CRITICAL:共享规则
25
25
 
26
- 先读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。若共享规则不存在、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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。
26
+ 先读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。
27
27
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
28
28
 
29
29
  ## 路由
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli skills --help"
17
17
 
18
18
  # weaver-work-cli Skill Maker
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
 
22
22
 
23
23
  本 Skill 参考飞书 CLI 的 `lark-skill-maker`,但输出范围更完整:Agent 需要把已经给出的业务模块资料同步固化为 `weaver-e10-*` Agent Skill 和对应 `src/shortcuts/<module>` TypeScript CLI 能力。新业务模块一开始没有对应 `weaver-work-cli` 业务命令是正常输入,但不能只生成文档型 Skill;默认要把 CLI 一并设计、实现、测试并让 Skill 调用真实 operation。转换时以**业务语义保真**为第一目标:入口 `SKILL.md` 可以轻量,但 `references/`、schema、handler、测试和禁用边界必须承接源资料里的可执行业务细节,不能把多份源 MD 压缩成泛泛概述导致能力退化。
@@ -37,7 +37,7 @@ README.md
37
37
  入口文件保持轻量,必须包含:
38
38
 
39
39
  - frontmatter:使用检测工具认可的顶层字段,禁止 `metadata:` 嵌套。
40
- - CRITICAL:要求先读 `../weaver-e10-shared/SKILL.md`;若不存在先执行 `weaver-work-cli skills install shared --target-dir <当前Agent的Skills目录>`,若 CLI 未安装先执行 `npm install -g weaver-work-cli`,安装或读取失败时停止;业务模块安装前版本检查统一写在 shared Skill 中,不在各业务入口重复。
40
+ - CRITICAL:要求先读 `../weaver-e10-shared/SKILL.md`;若共享规则不存在、CLI 未安装或读取失败,必须调用宿主提供的提问/确认弹框说明缺失项与补齐计划,并在确认信息中原样展示 `npm install -g weaver-work-cli`(仅缺 CLI 时执行)和 `weaver-work-cli skills install shared --target-dir <当前Agent的Skills目录>`;用户明确确认后由 Agent 直接代为按顺序执行且每条仅执行一次,不得要求用户手动执行;安装或读取失败时停止。业务模块安装前版本检查统一写在 shared Skill 中,不在各业务入口重复。
41
41
  - 路由优先级:先判断是否属于该业务模块,再选 operation。
42
42
  - 高优先级语义:业务对象、别名、关键字段、常见用户说法。
43
43
  - 命令表:用户意图、CLI operation、按需读取的 reference。
@@ -15,7 +15,7 @@ dependencies:
15
15
  cliHelp: "weaver-work-cli archive --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 数据。
@@ -15,7 +15,7 @@ dependencies:
15
15
  cliHelp: "weaver-work-cli workflow --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 数据。
@@ -41,13 +41,13 @@ cliHelp: "weaver-work-cli workflow --help"
41
41
  收到用户任务(查询/查看/操作/批量/共享/发起/修改)后,**不要先推理规划、不要以翻文档代替执行、不要把 references 通读一遍**,按下面两步固定执行:
42
42
 
43
43
  1. **第一轮就并行发起(关键:不要串行拆成多轮往返)**:在**同一条消息**里同时发出下列调用——
44
- - Read `../weaver-e10-shared/SKILL.md`(若尚未读过);
45
- - `weaver-work-cli [--is-connector true] --json workflow run workflow.memoryPrompt`——该命令**无入参**;**先按本文件开头的 `--is-connector` 判据确定前缀,再直接执行**(仅"非首次对话且距上次成功读取记忆不足 6 小时"时跳过);
46
- - **查询类意图**只读 [`workflow-query.md`](references/workflow-query.md) 一份(已覆盖 `workflow.search` 与 `workflow.todoStat`,不要再读其他查询文档);**但该文件约 108 KB / 838 行、一次读不完**——按它开头的**「分段索引」分次读,单次 `limit` 不超过 150 行**:**首轮并行读契约段两次**(`offset 1 limit 123` 与 `offset 124 limit 123`,已覆盖 Operation、全部输入参数含「大分类判定」、时间条件与「待办时间默认语义」、执行流程),其余章节(`planJson` 编排、汇报式分组骨架、渲染规则与示例)**只在需要的那一刻按索引给出的行区间补读**;查看/操作/共享/发起/修改等意图读对应那一份 reference 即可,不要顺手把查询文档也一起读;**唯一例外是批量操作**——用 `scopeCondition` 走范围驱动时要构造与 `workflow.search` 同形的查询条件,**这一轮可以同时读 [`workflow-query.md`](references/workflow-query.md) 与 [`workflow-batch.md`](references/workflow-batch.md)**(前者给条件写法,后者给 `scopeCondition`/`action` 的执行口径),其余意图仍只读对应那一份;
47
- - **泛化待办查询**(如"今天有哪些待办")先看上一步 `memoryPrompt` 返回的 `oaContext.smartGrouping`:`false`(低版本)→ **直接** `workflow.search`(category=todo,**不要带 `planJson`/`subCategory`**),CLI 已自带分组统计与卡片,原样渲染即结束;`true`(智能分组)→ 才追加 `workflow.todoStat` 做统计规划,再带 `planJson` 取数。**不要在 `smartGrouping` 为 `true` 之前先调 `workflow.todoStat`**——低版本必然失败(报 `todo_stat_requires_smart_mode`)白费一次调用。
44
+ - Read `../weaver-e10-shared/SKILL.md`(若尚未读过);
45
+ - `weaver-work-cli [--is-connector true] --json workflow run workflow.memoryPrompt`——该命令**无入参**;**先按本文件开头的 `--is-connector` 判据确定前缀,再直接执行**(仅"非首次对话且距上次成功读取记忆不足 6 小时"时跳过);
46
+ - **查询类意图**只读 [`workflow-query.md`](references/workflow-query.md) 一份(已覆盖 `workflow.search` 与 `workflow.todoStat`,不要再读其他查询文档);**但该文件约 108 KB / 838 行——整读会超单次读取上限被明确拒绝**(Read 单次上限约 **20,000 tokens ≈ 100 KB / 800 行**):**首轮一次读完开头的契约段**(`offset 1 limit 244`,约 30 KB,已覆盖 Operation、全部输入参数含「大分类判定」、时间条件与「待办时间默认语义」、执行流程),其余章节(`planJson` 编排、汇报式分组骨架、渲染规则与示例)**只在需要的那一刻按它开头的「分段索引」给出的行区间补读**;查看/操作/共享/发起/修改等意图读对应那一份 reference 即可,不要顺手把查询文档也一起读;**唯一例外是批量操作**——用 `scopeCondition` 走范围驱动时要构造与 `workflow.search` 同形的查询条件,**这一轮可以同时读 [`workflow-query.md`](references/workflow-query.md) 与 [`workflow-batch.md`](references/workflow-batch.md)**(前者给条件写法,后者给 `scopeCondition`/`action` 的执行口径),其余意图仍只读对应那一份;
47
+ - **泛化待办查询**(如"今天有哪些待办")先看上一步 `memoryPrompt` 返回的 `oaContext.smartGrouping`:`false`(低版本)→ **直接** `workflow.search`(category=todo,**不要带 `planJson`/`subCategory`**),CLI 已自带分组统计与卡片,原样渲染即结束;`true`(智能分组)→ 才追加 `workflow.todoStat` 做统计规划,再带 `planJson` 取数。**不要在 `smartGrouping` 为 `true` 之前先调 `workflow.todoStat`**——低版本必然失败(报 `todo_stat_requires_smart_mode`)白费一次调用。
48
48
  > 以上调用**互不依赖,必须并行**:串行拆轮会成倍拉长耗时。**实测基准**:一次泛化待办查询全程约 70s,其中**模型轮次占 ~95%**(每轮约 8~25s,主因是模型输出量),CLI 命令本身合计只有 1~2s。**能省一轮就省一轮**——尤其不要为"解析上一轮输出""取流程 ID"另起一轮。
49
- - **[`workflow-memory.md`](references/workflow-memory.md) 本步不读**——记忆读取的命令形态见上一行(**含 `--is-connector` 判据**,按它确定前缀后执行),**记忆保存的规则已在本文件「记忆保存(全局规则)」章节给全**(本轮任务结束时按那一节执行);只有需要判断"放 `user.md` / `memory.md` / `workflow:{id}` 哪一类"或其它字段细节时,才在需要的那一刻去读它。
50
- - **读不全就按行段重读源文件,不要去读宿主落盘的临时输出文件**:单次读取过大时宿主会把它落盘并只回一段预览,那段落盘文件(`~/.workbuddy/projects/**/tool-results/**`)**没有读取权限**,去读它必然拿一句 `Permission … has been denied`、白费一轮;正确做法是回到源文件、用 `offset`/`limit` 按行段重读。
49
+ - **[`workflow-memory.md`](references/workflow-memory.md) 本步不读**——记忆读取的命令形态见上一行(**含 `--is-connector` 判据**,按它确定前缀后执行),**记忆保存的规则已在本文件「记忆保存(全局规则)」章节给全**(本轮任务结束时按那一节执行);只有需要判断"放 `user.md` / `memory.md` / `workflow:{id}` 哪一类"或其它字段细节时,才在需要的那一刻去读它。
50
+ - **读被拒就按行段重读源文件,不要去读宿主的落盘文件**:Read 单次超限是**明确报错**(提示改用 `offset`/`limit`),照提示把源文件分行段重读即可;**不要**去读宿主的落盘文件(`~/.workbuddy/projects/**/tool-results/**`:**没有读取权限**,去读必然拿一句 `Permission … has been denied`、白费一轮——那是**命令输出**超线时的落盘预览,不是 Read 的读取路径)。
51
51
  2. **执行用户任务**:按下方「选哪个命令」与「处理链」选定 operation 并执行,参数以对应 reference 为准。
52
52
 
53
53
  > `workflow.memoryPrompt` 返回的 `oaContext` 已含 OA 版本、**当前环境是否支持智能分组(`smartGrouping`)**与当前用户身份(岗位/部门/分部)——判模式直接看 `smartGrouping`(不要自己比版本号)、引用身份直接用它,不要再单独查组织信息。
@@ -66,11 +66,11 @@ cliHelp: "weaver-work-cli workflow --help"
66
66
  **每轮完整实质任务结束、向用户输出最终回复之前**,必须自行判断本轮是否出现**新的、有价值的语义记忆**(例如用户新澄清/确认了具体工作流、字段名、字段选项;与已有记忆重复的不算,必填字段的填值偏好不算):
67
67
 
68
68
  - **有** → 组装本轮「用户原始意图 + 澄清过程 + 确认结果」的消息列表,**实际调用** `weaver-work-cli [--is-connector true] --json workflow run workflow.memoryExtract --input-json '{"msgList":[{"msgRole":"user","msgValue":"…"},{"msgRole":"assistant","msgValue":"…"}],"async":true}'`(**要不要带 `workflowId` 见下一条**):
69
- - **`msgList` 每项的字段名固定是 `msgRole` / `msgValue`**(按对话顺序:user 放用户原话/澄清回复,assistant 放命令返回/你的确认说明),**不要写成 `role` / `content`**;
70
- - **`workflowId` 只在「这条记忆换个工作流就不成立」时才带**——① 澄清**工作流本身**(业务别名、名称消歧、把口语简称落到某个工作流)⇒ **不带**:这类事实跨工作流通用,带上会被锁进该工作流维度,**而别名存在的意义正是"还没确定工作流时用它去找工作流"**;② 澄清**该工作流内部**(表单字段与选项含义、节点流转、提交节奏、审批规则)⇒ **带上**。一句话判据:**换个工作流还成立吗?成立 → 不带;只在某个工作流里成立 → 带**;
71
- - **保存「业务别名 → 工作流」映射时,ID 必须来自本轮命令返回**:`workflow.search` / plan 的 **`cards[].workflowId`**、`workflow.createForm` 澄清候选的 `id`、`workflow.todoStat` 的 `countDetails[].workflowId`——拿到就必须把 ID 写进 `msgValue` 的事实句(如「业务别名"问题流程"= 工作流"E10客户问题支持解决流程",workflowId=1003655203465764898」);**不允许只记名称、把 ID 留空**——留空就是「(待确认)」,后续查询只能拿纯名称去试探,多命中还要再澄清一次;
72
- - `saved:true` → **用自然语言告知用户会记住什么**(如"后续再发起请假流程时会默认按本次偏好(年假)填写"),不展示接口原文;
73
- - `saved:false` → 按静默失败处理,不告知用户、不重试,直接继续回答用户原本问题。
69
+ - **`msgList` 每项的字段名固定是 `msgRole` / `msgValue`**(按对话顺序:user 放用户原话/澄清回复,assistant 放命令返回/你的确认说明),**不要写成 `role` / `content`**;
70
+ - **`workflowId` 只在「这条记忆换个工作流就不成立」时才带**——① 澄清**工作流本身**(业务别名、名称消歧、把口语简称落到某个工作流)⇒ **不带**:这类事实跨工作流通用,带上会被锁进该工作流维度,**而别名存在的意义正是"还没确定工作流时用它去找工作流"**;② 澄清**该工作流内部**(表单字段与选项含义、节点流转、提交节奏、审批规则)⇒ **带上**。一句话判据:**换个工作流还成立吗?成立 → 不带;只在某个工作流里成立 → 带**;
71
+ - **保存「业务别名 → 工作流」映射时,ID 必须来自本轮命令返回**:`workflow.search` / plan 的 **`cards[].workflowId`**、`workflow.createForm` 澄清候选的 `id`、`workflow.todoStat` 的 `countDetails[].workflowId`——拿到就必须把 ID 写进 `msgValue` 的事实句(如「业务别名"问题流程"= 工作流"E10客户问题支持解决流程",workflowId=1003655203465764898」);**不允许只记名称、把 ID 留空**——留空就是「(待确认)」,后续查询只能拿纯名称去试探,多命中还要再澄清一次;
72
+ - `saved:true` → **用自然语言告知用户会记住什么**(如"后续再发起请假流程时会默认按本次偏好(年假)填写"),不展示接口原文;
73
+ - `saved:false` → 按静默失败处理,不告知用户、不重试,直接继续回答用户原本问题。
74
74
  - **没有** → 不调用 `workflow.memoryExtract`,直接输出最终回复;**不要纠结"一次性原因(如请假事由)是否值得记忆"**。
75
75
 
76
76
  **硬禁令(违反即为没保存)**:
@@ -121,9 +121,9 @@ cliHelp: "weaver-work-cli workflow --help"
121
121
  - 查看类意图 -> 优先用列表返回的 `requestId`;只有用户明确指向"第 N 条"时才用 `index`(分组场景加 `group`)定位。
122
122
  - 单条操作 -> `workflow.operatePrepare` -> 用户确认 -> `workflow.operateApply`。
123
123
  - 批量处理(提交/置已读/催办/共享/转发/退回)-> **6 个都是单命令**(`workflow.batchSubmit` / `workflow.batchRead` / `workflow.batchSupervise` / `workflow.batchShare` / `workflow.batchForward` / `workflow.batchReject`):`confirm: true` 与 `requestIds` 在**同一次调用**里传,**不需要先跑 Prepare,也没有 continuation**。三条路径按**目标的来源**选:
124
- - **目标是上一轮查询结果里的具体几条**("前两条/刚才那些"、或点名条目)→ 直接把 `requestIds`(+ `confirm:true`)传给对应批量命令,**一次调用完成**,不要再多发一轮确认摘要。
125
- - **目标是一个范围(没有准确 `requestId`)** → **必须先数条数再执行**:先用 `scopeCondition`(与 `workflow.search` 同形的条件)+ `action:"total"` **只查条数**(`action` 在给了 `scopeCondition` 时**必填**,漏写报 `batch_action_required`),把「范围 + 条数」报给用户确认(`total=0` 但 `scopeTotal>0` 时要说明"有 N 条但不适用本次操作",不能说成没有数据)。
126
- - **目标是一个范围、用户已确认条数** → 再用同一条 `scopeCondition` 配 `action:"execute"`;**循环由 CLI 内部完成**(查一页→执行→排除已处理/失败的 ID→再查,直到取完或触达上限),**不要自己写"查一页→数 ID→再执行"的多轮流程**。返回里给的是成功/失败条数、失败清单与 `stoppedReason`(**不含批次数等内部细节**),照它汇报即可——`scope_not_batch_eligible` 表示"范围内有数据但本次操作一条都取不到"(**不是**"没有数据"),要说明原因并给替代操作(如改 `workflow.batchRead`)。
124
+ - **目标是上一轮查询结果里的具体几条**("前两条/刚才那些"、或点名条目)→ 直接把 `requestIds`(+ `confirm:true`)传给对应批量命令,**一次调用完成**,不要再多发一轮确认摘要。
125
+ - **目标是一个范围(没有准确 `requestId`)** → **必须先数条数再执行**:先用 `scopeCondition`(与 `workflow.search` 同形的条件)+ `action:"total"` **只查条数**(`action` 在给了 `scopeCondition` 时**必填**,漏写报 `batch_action_required`),把「范围 + 条数」报给用户确认(`total=0` 但 `scopeTotal>0` 时要说明"有 N 条但不适用本次操作",不能说成没有数据)。
126
+ - **目标是一个范围、用户已确认条数** → 再用同一条 `scopeCondition` 配 `action:"execute"`;**循环由 CLI 内部完成**(查一页→执行→排除已处理/失败的 ID→再查,直到取完或触达上限),**不要自己写"查一页→数 ID→再执行"的多轮流程**。返回里给的是成功/失败条数、失败清单与 `stoppedReason`(**不含批次数等内部细节**),照它汇报即可——`scope_not_batch_eligible` 表示"范围内有数据但本次操作一条都取不到"(**不是**"没有数据"),要说明原因并给替代操作(如改 `workflow.batchRead`)。
127
127
  - 单条共享 -> `workflow.sharePrepare` -> 用户确认 -> `workflow.shareApply`。
128
128
  - 发起流程 -> `workflow.createForm`(传 `workflow`,解析可发起的工作流并拿到 `continuation`;返回 `NEEDS_CLARIFICATION` 时按 `candidates` 与用户确认后用 `名称(ID)` 重发)-> 按用户意图填 `data` -> `workflow.createRequest`(`context` 传上一步的 `continuation`,`action` 取 `draft`/`submit`)。**必填是否齐不用模型判断**:`action:"submit"` 缺必填时命令不会创建流程,返回 `NEEDS_INPUT` + `missingFields`,一次问齐后带同一 `context` 重发;`action:"draft"` 则照常建草稿、缺失项只作提醒。
129
129
  - 修改表单 -> `workflow.editLoad` 拿 `context` -> `workflow.editPrepare` -> 用户确认 -> `workflow.editApply`。
@@ -189,10 +189,10 @@ cliHelp: "weaver-work-cli workflow --help"
189
189
 
190
190
  1. **先停止盲目重试**,不要连续重复提交相同 `.apply`
191
191
  2. 优先从以下角度解释:
192
- - 写请求可能已经到达服务端,但连接在结果确认前中断
193
- - 服务端可能只处理了部分流程
194
- - 写接口已返回成功,但详情回查失败或与预期不一致
195
- - continuation、`context`、目标流程或登录上下文可能已经变化
192
+ - 写请求可能已经到达服务端,但连接在结果确认前中断
193
+ - 服务端可能只处理了部分流程
194
+ - 写接口已返回成功,但详情回查失败或与预期不一致
195
+ - continuation、`context`、目标流程或登录上下文可能已经变化
196
196
  3. 如需确认,只补 **一次** 只读查询(例如 `workflow.detail` 或 `workflow.search`),不要陷入 query/write 循环
197
197
  4. 最终给用户明确结论、已知状态、成功/失败项和下一步人工确认建议,而不是继续无意义重试
198
198
 
@@ -888,7 +888,7 @@
888
888
  }
889
889
  },
890
890
  "artifactBaseline": {
891
- "aggregateSha256": "20733d8b417e29231dde9b850c6d78d5a1553049d1db4516e1fc8911260badf0",
891
+ "aggregateSha256": "3ca81d7b85aa07fd196cea5d127f8a68b5bfa38d7b9050644783264feeed4345",
892
892
  "files": [
893
893
  {
894
894
  "path": "skills/weaver-e10-workflow/references/workflow-agent-entry.md",
@@ -902,8 +902,8 @@
902
902
  },
903
903
  {
904
904
  "path": "skills/weaver-e10-workflow/references/workflow-create.md",
905
- "size": 28456,
906
- "sha256": "c7f39ce9ef43a0af88efd74436457d355ae82ade7895516d6906459196d30a09"
905
+ "size": 30764,
906
+ "sha256": "2b0fb5a3d1b53f7586279f4a51f8a390d02ce6c2dbc3de902602d784508741ce"
907
907
  },
908
908
  {
909
909
  "path": "skills/weaver-e10-workflow/references/workflow-edit.md",
@@ -922,8 +922,8 @@
922
922
  },
923
923
  {
924
924
  "path": "skills/weaver-e10-workflow/references/workflow-query.md",
925
- "size": 108260,
926
- "sha256": "cc563383eee51d2b693f1ee28798a1174fbc7574c430c8d163439cb7f76152f1"
925
+ "size": 108319,
926
+ "sha256": "902e3cb5e24114963ad41dac652a0d46d7bc7d1d5a49eda3d9bd3ec861e9527a"
927
927
  },
928
928
  {
929
929
  "path": "skills/weaver-e10-workflow/references/workflow-share.md",
@@ -937,8 +937,8 @@
937
937
  },
938
938
  {
939
939
  "path": "skills/weaver-e10-workflow/SKILL.md",
940
- "size": 39690,
941
- "sha256": "1f513a02043f4f35b33936be9acf633dd5a62d9f1aad3e6b4443bdc336e14173"
940
+ "size": 39786,
941
+ "sha256": "3d7b2c84ad5827c5ab5dd9d85ae53b70adb669082b45b0dc023de69290c95927"
942
942
  },
943
943
  {
944
944
  "path": "src/shortcuts/workflow/continuation.ts",
@@ -957,8 +957,8 @@
957
957
  },
958
958
  {
959
959
  "path": "src/shortcuts/workflow/host.ts",
960
- "size": 11367,
961
- "sha256": "77b8edaa8449ab7736ada02fc7432b41c8ec58ff7160dfad20cf9af5c329dd47"
960
+ "size": 11980,
961
+ "sha256": "c1f0ae44fb2267be1888b80faa35fb0ce9ab596b9aa7ca6e0e5429933745b920"
962
962
  },
963
963
  {
964
964
  "path": "src/shortcuts/workflow/index.ts",
@@ -977,13 +977,13 @@
977
977
  },
978
978
  {
979
979
  "path": "src/shortcuts/workflow/operations/form.ts",
980
- "size": 219875,
981
- "sha256": "df101d6f5d73135e488b0adff8f3de30489706876eaedd6dad350053d7930f66"
980
+ "size": 225404,
981
+ "sha256": "4938e30cecf9d6da790325d1162f834bf85c21e8b18f1e5d5c77d9483216f947"
982
982
  },
983
983
  {
984
984
  "path": "src/shortcuts/workflow/operations/read.ts",
985
- "size": 214820,
986
- "sha256": "da69b7b9ec1ea79a10462bb9d7e9bf225705322a2b6111632660cbe4bac6bea9"
985
+ "size": 251625,
986
+ "sha256": "374e4d600dfa9b0754755c051ebfd2f4a6549a52d4cb7e78ec2b6c46c838e9e8"
987
987
  },
988
988
  {
989
989
  "path": "src/shortcuts/workflow/operations/registry.ts",
@@ -8,7 +8,7 @@
8
8
 
9
9
  | Operation | 风险 | 固定规则 |
10
10
  | --- | --- | --- |
11
- | `workflow.createForm` | read | 必传 `workflow`(`名称(ID)` / 名称(可传多个,用英文逗号分隔,如 `报销,报销流程`) / ID):内部解析出**可发起**的工作流并载入发起表单(runtime/frame/字段清单/fileUploadParams),顺带返回该工作流的发起偏好。不落任何业务数据。解析不出唯一目标时回澄清(`NEEDS_CLARIFICATION`,候选见 `candidates`)。**已给 `名称(ID)` / 纯 ID 时不查可发起列表**(名称与可发起性直接由表单载入接口给出),该 ID 不存在 / 无发起权限时同样回澄清,但带 `clarificationReason` 区分 |
11
+ | `workflow.createForm` | read | 必传 `workflow`(`名称(ID)` / 名称(**可一次给多个说法**:数组多元素,或一个元素内用英文逗号分隔)/ ID):内部解析出**可发起**的工作流并载入发起表单(runtime/frame/字段清单/fileUploadParams),顺带返回该工作流的发起偏好。不落任何业务数据。解析不出唯一目标时回澄清(`NEEDS_CLARIFICATION`,候选见 `candidates`)。**已给 `名称(ID)` / 纯 ID 时不查可发起列表**(名称与可发起性直接由表单载入接口给出),该 ID 不存在 / 无发起权限时同样回澄清,但带 `clarificationReason` 区分 |
12
12
  | `workflow.createRequest` | high-risk-write | requiresConfirmation;必传 `context`/`data`/`action`;`action` **必填**(`draft` 存草稿 / `submit` 提交审批);遇 `partial`/`write_uncertain` 禁止重试 |
13
13
 
14
14
  ## 发起链路(两条命令,模型不需要自己判断必填)
@@ -37,8 +37,8 @@
37
37
 
38
38
  - `workflow`(string[],必填):工作流条件——`"名称(ID)"` / 纯名称 / 纯数字 ID。
39
39
  - **自带显式 ID(`"名称(ID)"` 或纯数字)时不查可发起列表**:流程名与"你能不能发起"都由表单载入接口直接给出,因此比"按名称解析"少一整次往返。该 ID 不可用时仍回澄清,但会带 `clarificationReason` 说明是**哪一种**(见下)。
40
- - **纯名称**按当前用户**可发起**的工作流做模糊匹配,可传多个,用英文逗号分隔,如 `报销,报销流程`。
41
- - **单条命中**,或**多命中且其中有一个名字与所写完全一致** → 直接选定并载入表单,`selectionSource` 分别为 `workflowId`(按 ID 命中)/ `single`(唯一命中)/ `exactName`(全名精确匹配)。`exactName` 表示"候选里恰好有一个名字与所写完全一致"(如所写"总部费用报销",候选是「总部费用报销 / 总部费用报销流程 / 总部费用报销(自定义)」)——CLI 已替用户选定,**不要再反问"您指的是哪一个"**。
40
+ - **纯名称**按当前用户**可发起**的工作流做模糊匹配,**可一次给多个说法**:数组多个元素(`["报销","报销流程"]`)与一个元素内用英文逗号分隔(`["报销,报销流程"]`)**完全等价**,CLI 会把各说法拆成关键词、命中取并集去重。
41
+ - **直接选定并载入表单**时,`selectionSource` 标明是如何选定的:`workflowId`(按 ID 命中)/ `single`(唯一命中)/ `exactName`(全名精确匹配)。`exactName` 表示 CLI 已替用户选定,**不要再反问“您指的是哪一个”**。
42
42
  - **0 命中**,或**多命中且没有与所写完全一致的** → **澄清**:返回 `status: "NEEDS_CLARIFICATION"` + `candidates`(每项含 `id`/`name`/`display`,`display` 是 `名称(ID)`),此时**不返回任何表单数据**。把候选**原样**列给用户(不加 "(Recommended)"/"推荐" 等后缀,由用户明确选择),选定后用 `display` 的 `名称(ID)` 重发同一条命令。
43
43
  - **自带显式 ID 但该 ID 不可用** → 同样回澄清(`candidates` 为空),并带 `clarificationReason` 标明是**哪一种**——这两句话**必须分开说、不许混**:
44
44
  - `clarificationReason = "workflow_not_exist"`:该 ID 不存在(可能已删除或被停用)。如实告知"这个 ID 不存在",让用户核对 ID 或改用流程名称重发;**不要**说成"没有可发起的工作流"这类模糊说法。
@@ -54,9 +54,11 @@
54
54
 
55
55
  **查询词策略**:
56
56
 
57
- - **优先用记忆别名改写后再传**:用户给出的表达命中记忆别名(如"手机话费报销"含别名"费用报销")→ **直接传记忆别名**,不要先试用户原词、再试宽泛词。
58
- - **禁止用宽泛词撞无关工作流**:`"话费"` 这类宽泛词可能唯一命中**语义无关**的工作流(如"话费补贴标准审批流程")。载入表单后**先核对 `workflow` 里的名称/类型与用户意图是否一致**(报销类意图 → 名称应含"报销/费用",不应是"补贴标准/行政事务"类);不一致就**不要往下填字段**,改用记忆别名重发 createForm。
59
- - 澄清(0 命中)且记忆别名也查不到 → 此时才反问用户确认工作流,不要自行换词试探。
57
+ - **优先用记忆别名改写后再传**:用户给出的表达命中记忆别名(如"手机话费报销"含别名"费用报销")→ **直接传记忆别名**(可与原词并列成一次多关键词,见下条),**不要分两次命令试探**(先只传原词、没命中再换一个词)。
58
+ - **一次给多个说法**:`workflow` 同一批次可并列多个说法(数组多元素 或 英文逗号分隔,见输入节);**不确定完整名称时,把①用户说法 ②可能的全名/同义说法 ③一个更宽的「上位词」都并列进这一批**——用户说"会议室预定",批次里就一并带上"会议"(如 `["会议室预定","会议室预订","会议室申请","会议"]`)。**同一批次加词不额外花往返**:命中取并集去重,某个词命不中只是白给,命中了就多一条线索。
59
+ - **上位词可以放进批次,但命中后必须核对**:`"话费"` / `"会议"` 这类宽词可能命中**语义无关**的工作流(如“话费”→“话费补贴标准审批流程”)。载入表单后**先核对 `workflow` 里的名称/类型与用户意图是否一致**(报销类意图 → 名称应含“报销/费用”,不应是“补贴标准/行政事务”类);**不一致就绝不要往下填字段**,改用记忆别名或更准的说法重发 createForm。**`selectionSource: "single"`(唯一命中即选定、不澄清)是最该核对的一档**。
60
+ - **真正被禁的是"分多次命令逐词去撞"**:禁止先甲、再乙、再丙地反复试(把"换词"当检索策略,每试一次多烧一轮往返);**同一条命令里并列多个词、其中包括一个上位词,都不属于被禁的情形**——那是**补充召回**,不是拿宽泛词当主力检索。
61
+ - **不要再继续换词试探**(一次多关键词后仍未定,就反问用户确认)。
60
62
 
61
63
  **拿到 form 返回后直接按用户已给信息拼 `data` 并立即调用 `createRequest`**——不分析字段、不猜映射、不比对选项,**也不要用空 `data` 先探测必填清单**(用户说了什么字段就填什么、用用户原词;必填缺失由 `createRequest` 的 `missingFields` 告知)。
62
64
 
@@ -110,9 +112,11 @@ weaver-work-cli --json workflow run workflow.createRequest --input-json '{"conte
110
112
  ## 返回
111
113
 
112
114
  - createForm:`status` 为 `FORM_READY` 时给 `continuation`、`workflow`、`runtime`、`frame`、`requiredFields`(字段 id 数组)、`subFormRequired`(subFormId → 字段 id 数组)、`editableFields`(**可写字段 id 白名单**)、`fields`(**布局级字段全集**,含联动隐藏/未在当前页展示的字段,**不等于"页面上肉眼可见的字段数"**;大表单时可能换成紧凑编码、或被整体移出 stdout —— 移出时同伴有 `writableFields`)、`initialValues`、`systemFields`、`fileUploadParams`、`launchPreferences`、`requiredInfoWarning`。**不返回 OA 的联动(显示属性)规则**——必填一律以 `createRequest` 的 `missingFields` 为准(见「注意」)。`status` 为 `NEEDS_CLARIFICATION` 时只给 `candidates` / `clarificationKeyword` / `clarificationReason`(存在时,见「输入」里的 `workflow_not_exist` / `no_create_right`)/ `candidateCount` / `clarificationQuestion` / `note`,**不含任何表单数据**——它不是失败(`ok:true`),也不代表查询已执行。
113
- - createRequest:`status`(`CREATED` / `CREATED_SUBMITTED` / `NEEDS_INPUT` / `NEEDS_CONFIRMATION` / `ALREADY_APPLIED`)、`requestId`、`requestMark`、`requestName`、`url`、`contextId`、`fields`(确认预览:本次所填字段的落库结果,"我填的值到底存成了什么"就看这里)、`previewDetails`(明细表按列组织:`columns` 表头 + `rows` 每行明细;明细表按它排 Excel 列表格)、`missingFields`(**恒有值**:submit 成功时是空数组,draft 时是"提交前还需补齐"的提醒)、`missingFieldsNotice`(draft 且有缺失时的一段可直接转述的提醒文本)、`linkageResult`(联动带出/清空,原样转述)、`verification`(节点字段校验结果)、`attachmentFolderIds`。
115
+ - createRequest:`status`(`CREATED` / `CREATED_SUBMITTED` / `CREATED_SUBMIT_FAILED` / `NEEDS_INPUT` / `NEEDS_CONFIRMATION` / `ALREADY_APPLIED`)、`requestId`、`requestMark`、`requestName`、`url`、`contextId`、`fields`(确认预览:本次所填字段的落库结果,"我填的值到底存成了什么"就看这里)、`previewDetails`(明细表按列组织:`columns` 表头 + `rows` 每行明细;明细表按它排 Excel 列表格)、`missingFields`(**恒有值**:submit 成功时是空数组,draft 时是"提交前还需补齐"的提醒)、`missingFieldsNotice`(draft 且有缺失时的一段可直接转述的提醒文本)、`linkageResult`(联动带出/清空,原样转述)、`verification`(节点字段校验结果)、`attachmentFolderIds`、`submitResult`(提交结果,`success` / `failed`;**只在本命令真正发起过提交(`action:submit`)时出现**,`action:draft` 不带)、`submitFailReason`(**提交失败原因**:接口返回的可执行文案,仅 `submitResult: "failed"` 时出现)、`createRejectedReason`(创建这一步就被服务端拒绝、且未走提交路径时接口给出的原因)。
114
116
  - `NEEDS_CONFIRMATION`(`ambiguities` 非空)时同时给 `resolvedValues`("我传的值 → 服务端最终值"的回显)与 `missingFields`——先把 `ambiguities` 解决掉,再用同一 `context` 重发。
115
117
  - `needVerificationConfirm: true` 时流程**已创建但未提交**:向用户确认后用同一 `context`、带 `"verificationConfirmed": true` 重发 `action: "submit"`。
118
+ - **`CREATED_SUBMIT_FAILED`(提交结果=失败)**:流程**已创建为草稿**,但提交被服务端拒绝、**未进入审批**——表单数据已经落库,`requestId` / `requestName` / `url` 与成功时一样都给了(可直接打开查看或编辑),差别只在提交结果。此时 `submitResult: "failed"`、`submitFailReason` 是接口给出的失败原因。**处置:把失败原因原样转述给用户,并给出 `url`**;**不要**读成"什么都没做成",也**不要**原样重发同一次提交(会再堆一份草稿)。
119
+ - `submitResult`:`CREATED_SUBMITTED` 时为 `"success"`(不带 `submitFailReason`);`CREATED_SUBMIT_FAILED` 时为 `"failed"`;**被节点字段校验拦下或未确认校验(`needVerificationConfirm`)时本就未提交,不返回该字段**。
116
120
 
117
121
  ## 注意
118
122
 
@@ -1,18 +1,18 @@
1
1
  # 流程查询(workflow.search / workflow.todoStat)
2
2
 
3
- > **分段索引 —— 本文件约 108 KB / 838 行,必须按段读:单次 `limit` 不超过 150 行,不要整读。**
4
- > 单次读取过大会被宿主落盘、只回一小段预览,而那个落盘文件**不可读**(去读它只会拿到 `Permission … has been denied`,白费一轮);读不全时回到本文件按行段重读即可。
3
+ > **分段索引 —— 本文件约 108 KB / 833 行,必须按段读:整读会超单次读取上限被明确拒绝**(Read 单次上限约 **20,000 tokens ≈ 100 KB / 800 行**);**开头的契约段(1-244 行,约 30 KB)一次就能读完**,其余段落按本索引的行区间分次读。**
4
+ > 被拒时按报错提示改用 `offset`/`limit`、**回到本文件按行段重读**即可;**不要**去找宿主的落盘文件(`~/.workbuddy/projects/**/tool-results/**` 无读取权限,去读只会拿到 `Permission … has been denied`、白费一轮——"落盘 + 只回 2048 字节预览"那是**命令输出**超线时的行为,本文件的读取不走那条路)。
5
5
  >
6
6
  > | 段落 | 行区间 | 读取方式 |
7
7
  > | --- | --- | --- |
8
- > | **契约段**:本索引 + Operation + 输入参数(分类 + 大分类判定 / 筛选 / 时间 / filterFields / 分页排序)+ 执行模式与返回形态(含模式判定 `smartGrouping`)+ 待办时间默认语义 + 命令参数反思 + 执行流程 | 1-244 | **首轮并行读两次**:`offset 1 limit 123`、`offset 124 limit 123`(合计覆盖 1-246,含本段全部) |
8
+ > | **契约段**:本索引 + Operation + 输入参数(分类 + 大分类判定 / 筛选 / 时间 / filterFields / 分页排序)+ 执行模式与返回形态(含模式判定 `smartGrouping`)+ 待办时间默认语义 + 命令参数反思 + 执行流程 | 1-244 | **首轮一次读完**:`offset 1 limit 244`(约 30 KB,在单次上限内) |
9
9
  > | `planJson` 批量编排 | 245-324 | 泛化待办 / 一次取多组数时读:`offset 245 limit 80` |
10
10
  > | 汇报式分组骨架 + 七个维度 + 参与身份说明与分组去向 + 常见业务重点字段 + 汇总渲染规则 + 渲染红线 | 325-524 | 需要输出分组结果前读(分两次):`offset 325 limit 100`、`offset 425 limit 100` |
11
11
  > | 智能分组示例(各业务域样例,**仅供格式参照,不要照抄内容**) | 525-639 | 一般**不用读** |
12
- > | **异常返回处理 + 澄清后回传**(澄清信封、修正指令、认证失效) | 640-705 | 拿到 `ok:false` 或 `NEEDS_CLARIFICATION` 时读:`offset 640 limit 66` |
13
- > | 调用示例 | 706-784 | 需要时读:`offset 706 limit 79` |
14
- > | 返回(返回结构 / 错误码 / 幂等口径) | 785-824 | 处理 `ok` / `error` 时读:`offset 785 limit 40` |
15
- > | 注意 | 825-838 | 需要时读:`offset 825 limit 14` |
12
+ > | **异常返回处理 + 澄清后回传**(澄清信封、修正指令、认证失效) | 640-700 | 拿到 `ok:false` 或 `NEEDS_CLARIFICATION` 时读:`offset 640 limit 61` |
13
+ > | 调用示例 | 701-779 | 需要时读:`offset 701 limit 79` |
14
+ > | 返回(返回结构 / 错误码 / 幂等口径) | 780-819 | 处理 `ok` / `error` 时读:`offset 780 limit 40` |
15
+ > | 注意 | 820-833 | 需要时读:`offset 820 limit 14` |
16
16
  >
17
17
  > 行号以本索引为准;**改本文件时同步更新本索引**。按 `##` 标题定位同样有效。
18
18
 
@@ -655,14 +655,9 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
655
655
 
656
656
  ### 澄清后回传
657
657
 
658
- 名称类条件解析不出唯一对象时 CLI **不会静默放行**——统一判据如下(查询侧与发起侧 `workflow.createForm` 同一套):
658
+ 名称类条件**解析不出唯一对象**时不会静默放行:返回澄清信封(`ok:true` + `status:NEEDS_CLARIFICATION` + `data.candidates`),**不返回任何业务数据**。收到澄清就按下面的流程把候选原样交给用户;**不要**自行挑一个候选继续,也**不要**换词重发试探。
659
659
 
660
- - **没匹配到数据 → 澄清**(工作流 0 命中;其余系统字段 0 命中则硬失败,见下表);
661
- - **匹配到 1 个 → 不澄清**,直接用;
662
- - **匹配到多个、但候选里恰好有一个与所写完全一致(equals,忽略大小写与首尾空白)→ 不澄清**,直接用那一个;
663
- - **匹配到多个、且候选中没有与所写完全一致的 → 澄清**,把候选摆给用户选。
664
-
665
- 按此判据,返回形态分两种,**不要混为一谈**:
660
+ 返回形态分两类(澄清信封 / 硬失败),**不要混为一谈**:
666
661
 
667
662
  | 情形 | 返回 | 处理 |
668
663
  | --- | --- | --- |
@@ -13,7 +13,7 @@ requires:
13
13
  cliHelp: "weaver-work-cli invoice --help"
14
14
  ---
15
15
 
16
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 `[../weaver-e10-shared/SKILL.md](../weaver-e10-shared/SKILL.md)`,其中包含安装、E10 认证、JSON 输出、超时与重试预算、非交互环境处置和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
16
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 `[../weaver-e10-shared/SKILL.md](../weaver-e10-shared/SKILL.md)`,其中包含安装、E10 认证、JSON 输出、超时与重试预算、非交互环境处置和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
17
17
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 `[../weaver-e10-shared/SKILL.md](../weaver-e10-shared/SKILL.md)`。
18
18
 
19
19
  认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
@@ -217,4 +217,3 @@ weaver-work-cli --json invoice run invoice.issuing.make.prepare --input-json '{"
217
217
  - 禁止读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。
218
218
  - 共享、转让和标签当前未纳入 CLI manifest;新版源资料已给出提交接口,但仍需要补稳定接收人/标签 ID 来源、写后回查和测试后再开放。
219
219
  - 非发票类 E10 能力、通用流程编排、非业票通表单/审批/组织等业务不由本 Skill 承载。
220
-
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli im --help"
17
17
 
18
18
  # 泛微易秒办(im)
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 认证、JSON 输出契约、大结果渲染和高风险写入确认链,本技能不再重复。
@@ -2265,7 +2265,7 @@
2265
2265
  }
2266
2266
  },
2267
2267
  "artifactBaseline": {
2268
- "aggregateSha256": "ef5648f34b8db6158058279b07d9849ea9c18a0a3b8918ee57f7a98f18a84547",
2268
+ "aggregateSha256": "05803f5e794c7c98dfc4b5ab90c50d4e764db8bcb3c694824503038e284bd514",
2269
2269
  "files": [
2270
2270
  {
2271
2271
  "path": "docs/im.md",
@@ -2282,8 +2282,8 @@
2282
2282
  {
2283
2283
  "path": "skills/weaver-e10-yimiaoban/SKILL.md",
2284
2284
  "role": "generated-reference",
2285
- "size": 12569,
2286
- "sha256": "c221f7650948c02ec2bfa48f424826d98fc5b0f5581de9951905f00c920caa70"
2285
+ "size": 12684,
2286
+ "sha256": "b839b301d16b8cdee98b7cde87d853746be51957eff96c3972563de960daaeb1"
2287
2287
  },
2288
2288
  {
2289
2289
  "path": "skills/weaver-e10-yimiaoban/references/ding-write.md",
@@ -13,7 +13,7 @@ requires:
13
13
  cliHelp: "weaver-work-cli asset --help"
14
14
  ---
15
15
 
16
- **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须先提示用户先补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行),并把下面两条待执行命令原样完整展示给用户;Agent 不能自行安装——必须先取得用户明确确认后再执行。用户确认后按顺序执行且仅执行一次:① 缺 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`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
16
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
17
17
  **`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
18
18
 
19
19
  认证和登录态只能按共享规则通过 `weaver-work-cli auth ...` 命令判断;禁止直接读取、列出、打印或解析用户主目录下的旧 `.e10-cli`、auth、config 或 Keychain 数据。