weaver-work-cli 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/cmd/setup/index.js +1 -1
- package/dist/internal/e10/auth/commands.js +1 -6
- package/dist/internal/e10/auth/messages.js +3 -0
- package/dist/internal/e10/auth/session.js +8 -0
- package/dist/internal/e10/auth-recovery.js +148 -0
- package/dist/internal/e10/client.js +47 -15
- package/dist/internal/e10/context.js +8 -8
- package/dist/internal/e10/index.js +1 -0
- package/dist/internal/e10/request-runtime.js +51 -9
- package/dist/shortcuts/archive/host.js +3 -2
- package/dist/shortcuts/archive/manifest.js +1 -1
- package/dist/shortcuts/archive-oa/host.js +2 -1
- package/dist/shortcuts/archive-oa/manifest.js +1 -1
- package/dist/shortcuts/asset/host.js +7 -6
- package/dist/shortcuts/blog/host.js +4 -3
- package/dist/shortcuts/caizhilian/host.js +3 -2
- package/dist/shortcuts/caizhilian/manifest.js +1 -1
- package/dist/shortcuts/calendar/host.js +2 -1
- package/dist/shortcuts/contract/host.js +34 -59
- package/dist/shortcuts/ehr/host.js +2 -1
- package/dist/shortcuts/esb/host.js +2 -1
- package/dist/shortcuts/fna/host.js +6 -3
- package/dist/shortcuts/fna/manifest.js +10 -5
- package/dist/shortcuts/fna/operations/expense-chart.js +162 -0
- package/dist/shortcuts/fna/operations/registry.js +2 -0
- package/dist/shortcuts/hrm/host.js +2 -1
- package/dist/shortcuts/im/host.js +3 -2
- package/dist/shortcuts/invoice/host.js +7 -6
- package/dist/shortcuts/invoice/manifest.js +21 -141
- package/dist/shortcuts/invoice/operations/issuing-qys.js +134 -167
- package/dist/shortcuts/invoice/operations/registry.js +1 -6
- package/dist/shortcuts/jiuchuanhui/host.js +2 -1
- package/dist/shortcuts/mail/host.js +2 -1
- package/dist/shortcuts/meeting/host.js +2 -1
- package/dist/shortcuts/meeting/operations/eb/conflict.js +78 -12
- package/dist/shortcuts/okr/host.js +2 -1
- package/dist/shortcuts/plan/host.js +2 -1
- package/dist/shortcuts/project/host.js +2 -1
- package/dist/shortcuts/workflow/host.js +3 -5
- package/dist/shortcuts/workflow/index.js +1 -1
- package/dist/shortcuts/workflow/operations/chatscene.js +4 -22
- package/dist/shortcuts/workflow/operations/form.js +281 -166
- package/dist/shortcuts/workflow/operations/read.js +26 -2
- package/dist/shortcuts/workflow/stdout-compact.js +7 -0
- package/docs/SKILL.md +1 -1
- package/docs/_catalog.md +1 -1
- package/docs/agent-invoice.md +1 -1
- package/docs/caizhilian.md +1 -1
- package/docs/e10-auth.md +1 -1
- package/docs/fna.md +7 -3
- package/docs/invoice.md +4 -6
- package/package.json +1 -1
- package/skill-template/business-info.json +4 -1
- package/skill-template/domains/caizhilian.md +2 -1
- package/skill-template/domains/qiyecheng.md +1 -0
- package/skill-template/domains/yepiaotong.md +6 -2
- package/skill-template/skill-template.md +1 -0
- package/skills/weaver-e10-blog/SKILL.md +6 -1
- package/skills/weaver-e10-blog/references/blog-query.md +3 -1
- package/skills/weaver-e10-caizhilian/SKILL.md +18 -9
- package/skills/weaver-e10-caizhilian/references/action-flow.md +70 -0
- package/skills/weaver-e10-caizhilian/references/agent-entry.md +6 -2
- package/skills/weaver-e10-caizhilian/references/auth-and-install.md +207 -0
- package/skills/weaver-e10-caizhilian/references/file-collection.md +56 -54
- package/skills/weaver-e10-caizhilian/references/file-upload.md +4 -4
- package/skills/weaver-e10-caizhilian/references/host-executor-prompt.md +32 -0
- package/skills/weaver-e10-caizhilian/references/host-platform-integration.md +46 -0
- package/skills/weaver-e10-caizhilian/references/rule-index.md +56 -0
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +5 -16
- package/skills/weaver-e10-caizhilian/references/setting-backup.md +4 -13
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +6 -15
- package/skills/weaver-e10-caizhilian/references/setting-storage-docs-summary.md +126 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage-field-map.md +57 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage.md +142 -482
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +7 -7
- package/skills/weaver-e10-caizhilian/references/task-workflow.md +87 -0
- package/skills/weaver-e10-caizhilian/references/withheld.md +2 -2
- package/skills/weaver-e10-caizhilian/references/write-protocol.md +7 -0
- package/skills/weaver-e10-calendar/SKILL.md +6 -1
- package/skills/weaver-e10-esb/SKILL.md +8 -0
- package/skills/weaver-e10-esb/references/input-format.md +3 -1
- package/skills/weaver-e10-esb/references/source-manifest.json +5 -5
- package/skills/weaver-e10-hrm/SKILL.md +6 -1
- package/skills/weaver-e10-hrm/references/employee.md +1 -1
- package/skills/weaver-e10-hrm/references/org.md +1 -1
- package/skills/weaver-e10-hrm/references/position.md +1 -1
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -1
- package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +1 -1
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +6 -1
- package/skills/weaver-e10-jucailin/SKILL.md +6 -1
- package/skills/weaver-e10-jucailin/references/hr-contact.md +1 -1
- package/skills/weaver-e10-jucailin/references/salary.md +1 -1
- package/skills/weaver-e10-mail/SKILL.md +6 -1
- package/skills/weaver-e10-meeting/SKILL.md +11 -6
- package/skills/weaver-e10-meeting/references/meeting-eb.md +7 -3
- package/skills/weaver-e10-meeting/references/meeting-queries.md +3 -1
- package/skills/weaver-e10-meeting/references/meeting-verification.md +4 -2
- package/skills/weaver-e10-okr/SKILL.md +6 -1
- package/skills/weaver-e10-okr/references/source-manifest.json +5 -5
- package/skills/weaver-e10-plan/SKILL.md +6 -1
- package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +3 -1
- package/skills/weaver-e10-plan/references/plan-report-query.md +3 -1
- package/skills/weaver-e10-plan/references/source-manifest.json +7 -7
- package/skills/weaver-e10-qiyecheng/SKILL.md +16 -6
- package/skills/weaver-e10-qiyecheng/references/catalog.md +6 -3
- package/skills/weaver-e10-qiyecheng/references/expense-center.md +2 -0
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +78 -0
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +87 -33
- package/skills/weaver-e10-shared/SKILL.md +37 -14
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +11 -8
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +4 -4
- package/skills/weaver-e10-shared/references/weaver-e10-installation.md +3 -1
- package/skills/weaver-e10-wenshuding/SKILL.md +6 -1
- package/skills/weaver-e10-wenshuding/references/source-manifest.json +3 -3
- package/skills/weaver-e10-workflow/references/source-manifest.json +1 -2
- package/skills/weaver-e10-workflow/references/workflow-create.md +30 -55
- package/skills/weaver-e10-yepiaotong/SKILL.md +19 -17
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +72 -78
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-form-fill-rules.md +152 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +210 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +7 -7
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +11 -5
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +55 -33
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +102 -23
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +1 -1
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +53 -42
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +93 -213
- package/skills/weaver-e10-yimiaoban/SKILL.md +9 -2
- package/skills/weaver-e10-yimiaoban/references/file-user-i18n.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +9 -9
- package/skills/weaver-e10-ziguanjia/SKILL.md +6 -1
- package/dist/shortcuts/invoice/operations/issuing.js +0 -198
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-field-rules.md +0 -161
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-qys-ledger.md +0 -66
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing.md +0 -107
|
@@ -5,7 +5,7 @@ display_name_en: Weaver CLI Shared Rules
|
|
|
5
5
|
description: weaver-work-cli 共享规则:安装检查、E10 认证、JSON 输出、高风险写入、安全边界和引用路由。
|
|
6
6
|
description_zh: weaver-work-cli 共享规则:安装检查、E10 认证、JSON 输出、高风险写入、安全边界和引用路由。
|
|
7
7
|
description_en: Shared rules for weaver-work-cli, including installation checks, E10 authentication, JSON output, high-risk writes, safety boundaries, and reference routing.
|
|
8
|
-
version: 1.2.
|
|
8
|
+
version: 1.2.5
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
@@ -33,9 +33,15 @@ requires:
|
|
|
33
33
|
- 漏传 `--is-connector` **不会报错**,但会退回本机活跃 profile,可能操作到与预期不同的租户。
|
|
34
34
|
- **本套 Skill 里的命令示例一律省略 `--is-connector`**(示例只示意参数形态,不代表最终命令):执行前必须先按上表判定,命中「传」的要在 `weaver-work-cli` 之后补上 `--is-connector true`,且**本任务内每条命令都要带**——包括记忆读取、记忆保存这类无入参的命令。
|
|
35
35
|
|
|
36
|
+
## XiaoE 版本更新由客户端托管(全局覆盖)
|
|
37
|
+
|
|
38
|
+
本任务开始时一旦按下文规则判定当前智能体为 XiaoE,**不得执行 `weaver-work-cli --version` 或 `npm view weaver-work-cli version` 做可用性、版本或更新检查**。XiaoE 客户端已经负责检查并更新配套的 `weaver-work-cli`;Agent 直接进入登录态诊断或业务命令。本规则覆盖本 Skill、业务 Skill 及其 references 中所有通用的 `--version` 检查示例。
|
|
39
|
+
|
|
40
|
+
XiaoE 中如果后续命令直接返回 `command not found`、退出码 127 或明确的版本不兼容错误,停止并反馈 XiaoE 客户端运行时异常,不自行执行 npm 查询、安装或升级。仅非 XiaoE 环境继续使用下述版本检查与安装流程。
|
|
41
|
+
|
|
36
42
|
## 业务 Skill 安装前版本检查
|
|
37
43
|
|
|
38
|
-
用户要求安装任一业务模块 Skill
|
|
44
|
+
用户要求安装任一业务模块 Skill 时,先复用本任务开始时的宿主判定:XiaoE 环境跳过本节版本比对,由 XiaoE 客户端保证配套 CLI 更新;非 XiaoE 环境必须先执行 `weaver-work-cli --version` 与 `npm view weaver-work-cli version` 比对本地版本和 npm 源版本。若本地版本低于 npm 源版本,先询问用户是否使用(推荐)最新版 `weaver-work-cli`;用户确认后先执行 `npm install -g weaver-work-cli` 更新 CLI,再继续安装业务模块 Skill。用户拒绝时,说明将沿用本地版本后再继续。
|
|
39
45
|
|
|
40
46
|
## 最高优先级:XiaoE 统一登录
|
|
41
47
|
|
|
@@ -61,7 +67,7 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
61
67
|
|
|
62
68
|
下述 `auth xiaoe` 流程仅适用于上述已确认的 XiaoE 智能体环境;其他智能体不执行宿主脚本检测,直接进入浏览器 OAuth 流程。`auth xiaoe` 命令本身就是认证方式的显式选择;`hasXiaoEEnv` 使用桌面的 `--runtime-agent xiaoe` 或任意 `XIAOE_*` 环境变量识别运行环境。
|
|
63
69
|
|
|
64
|
-
需要登录态时只运行 `weaver-work-cli auth xiaoe`。CLI 内部按「平台凭证 Node 换票 → CLI 自带 `xiaoe_env.py` 兼容换票 → 宿主 `tokens.py` → 桌面 XiaoE 客户端会话 → `WEAVER_XIAOE_*` 环境映射」顺序取凭据;其中 `XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址,不是 E10 地址。`xiaoe_env.py` 属于 CLI npm 包,不放入 shared Skill,且只能由 CLI
|
|
70
|
+
需要登录态时只运行 `weaver-work-cli auth xiaoe`。CLI 内部按「平台凭证 Node 换票 → CLI 自带 `xiaoe_env.py` 兼容换票 → 宿主 `tokens.py` → 桌面 XiaoE 客户端会话 → `WEAVER_XIAOE_*` 环境映射」顺序取凭据;其中 `XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址,不是 E10 地址。`xiaoe_env.py` 属于 CLI npm 包,不放入 shared Skill,且只能由 CLI 内部执行和解析。业务命令不会在缺少本地会话时主动建立 XiaoE 登录态;已有会话被接口明确拒绝为失效时,CLI 会在公共请求层静默恢复并重放一次。失败时 CLI 返回结构化错误,Agent 不要替它执行脚本、安装 Python 依赖、手工取 Token 或自动引导用户在本地终端重复登录。
|
|
65
71
|
|
|
66
72
|
1. 未登录、登录失效、准备执行业务命令前需要确认 E10 会话,或 `auth status --no-check` 显示未登录时,先运行:
|
|
67
73
|
```text
|
|
@@ -70,8 +76,19 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
70
76
|
2. 不得因为本地存在旧 profile、`auth profile current` 指向旧环境,或 `auth profile list` 里只有旧环境,就跳过 XiaoE 统一登录;也不得先要求用户选择旧 profile 或输入域名。
|
|
71
77
|
3. XiaoE 统一登录由 CLI 按序取凭证:① 平台注入的 `XIAOE_USER_TOKEN` + `XIAOE_DOMAIN`,先走 Node 换票,再由 CLI npm 包自带的标准库 `xiaoe_env.py` 作兼容回退;② 宿主 `xiaoeUserData/tokens.py`(仅桌面宿主,CLI 在 macOS/Windows 都会先自动发现 XiaoE 客户端内置 Python,再回退到系统 Python);③ 内置原生实现读取桌面 XiaoE 客户端会话换取 `eteamId`,依次查找 `XIAOE_USER_SETTINGS_PATH`、`XIAOE_ROBOT_DATA_ROOT` / `XIAOE_ROBOT_ROOT` 和默认 `XiaoE/Robots/<id>/user_settings.json`,因此会话有效时不要求存在 `tokens.py`;④ `WEAVER_XIAOE_*` 环境映射。宿主只注入 `XIAOE_DOMAIN`、`XIAOE_USER_TOKEN` 等平台变量,不会注入 ETEAMSID 环境变量,CLI 也不读取 `XIAOE_ETEAMSID`。Agent 不要打印、转述、索取或要求用户手动设置这些凭证,也不要直接执行任一脚本或因为脚本报缺依赖就让用户安装 Python 包——凭据链内部的兼容回退由 CLI 完成。
|
|
72
78
|
4. `auth xiaoe` 是 XiaoE 认证方式的显式入口:CLI 不再判断当前宿主,只检查并消费可用凭据源。E10 目标地址按「显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile → CLI 内置默认值」解析,绝不能把 `XIAOE_DOMAIN` 当作 E10 地址。Token、Cookie、ETEAMSID 仍属于凭证,禁止在回复中展示。
|
|
73
|
-
5. XiaoE 统一登录走不通时,无论 macOS、Windows、Linux 或 Web,CLI 都返回 `authentication/xiaoe_credential_unavailable`,绝不自动打开浏览器或降级到 `auth login
|
|
74
|
-
6. `auth status --no-check`
|
|
79
|
+
5. XiaoE 统一登录走不通时,无论 macOS、Windows、Linux 或 Web,CLI 都返回 `authentication/xiaoe_credential_unavailable`,绝不自动打开浏览器或降级到 `auth login`;本任务必须停止,不得另行调用其他登录 Skill 或登录命令。
|
|
80
|
+
6. `auth status --no-check` 不会触发 XiaoE 统一登录;业务命令只有在已加载的会话被 E10 明确拒绝为失效时,才静默触发一次统一登录并重放该请求一次。首次无本地会话仍须显式执行 `auth xiaoe`;具体读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
81
|
+
|
|
82
|
+
### 认证错误只报告状态,不指定登录命令
|
|
83
|
+
|
|
84
|
+
CLI 和业务 Skill 在返回 `authentication` / `session_expired` 时,只能说明未登录或会话已失效,不得在 `error.message` 或业务错误分支中写死 `auth login`、`auth xiaoe`、`--base-url`、`--agent_type` 等具体登录命令或参数。
|
|
85
|
+
|
|
86
|
+
业务 Skill 的提示词必须把认证恢复写成下面的强制分流,不能只写“重新登录”或把认证方式交给错误文案决定:
|
|
87
|
+
|
|
88
|
+
1. Agent 必须重用本任务开始时的宿主判定,禁止调用任何其他登录 Skill。
|
|
89
|
+
2. 明确为 XiaoE 时,只执行 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。统一登录返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用,不自动回退浏览器登录。
|
|
90
|
+
3. 非 XiaoE 时,不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。已有可用 profile 时也可按用户选择切换并验证。
|
|
91
|
+
4. 登录恢复后,读操作可以重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial` / `write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
75
92
|
|
|
76
93
|
`auth xiaoe` 的 preflight 会输出不含凭证的 `authMode=xiaoe`、`credentialSourceDetected`、`attempted`、`platformCredentialDetected`、`tokenScriptDetected`、`clientSettingsDetected`、`environmentCredentialDetected` 和 `baseUrl`;命中脚本分支时会出现 `Trying XiaoE token script credential...`,命中内置 Node 会话分支时会出现 `Trying built-in XiaoE client session credential...`。成功后登录结果和 `auth status` 中的 `credentialSourceStep`、`credentialSourceType`、`credentialSourceLabel` 用于确认实际来源;`2 / token_script / xiaoeUserData/tokens.py` 表示宿主脚本换票成功,`3 / xiaoe_client / XiaoE client settings` 表示不依赖 `tokens.py`、由 Node 直接换票成功。
|
|
77
94
|
|
|
@@ -82,22 +99,28 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
82
99
|
`auth login` 会在本机 `127.0.0.1:19800` 监听浏览器回调,最长等待 5 分钟。在 Agent 沙箱/托管环境中,外部浏览器无法回调容器内 `127.0.0.1:19800`,因此:
|
|
83
100
|
|
|
84
101
|
1. 任意系统运行 `auth xiaoe` 时,收到 `xiaoe_credential_unavailable` 即反馈宿主登录态/凭据注入异常,不要自动切换 `auth login`,也不要要求用户去本地终端重复执行命令。
|
|
85
|
-
2.
|
|
86
|
-
3.
|
|
102
|
+
2. 仅非 XiaoE 环境在用户确认真实 E10 域名且确认 CLI 与浏览器同机后运行 `auth login`;仍须限时等待,超时未完成即终止并反馈。
|
|
103
|
+
3. 仅非 XiaoE 环境在用户无法完成浏览器登录、且明确要求并同意人工录入时,才可使用保底方式 `weaver-work-cli auth set --eteamsid "<ETEAMSID>" --base-url "<用户确认的登录域名>"`;它不是业务认证错误的默认恢复路径。ETEAMSID 由用户从已登录浏览器主动提供,Agent 不得索取、展示或转述该值。
|
|
87
104
|
4. 严禁不加限制地前台运行 `auth xiaoe` / `auth login` 并等待 OAuth 回调。
|
|
88
105
|
|
|
89
106
|
## 通用准则
|
|
90
107
|
|
|
91
108
|
1. 执行业务命令前先确认用法:优先读当前业务 Skill 和被路由到的 reference,必要时跑对应命令的 `--help` 或 `schema`,不要猜参数。
|
|
92
109
|
|
|
93
|
-
2. 首次使用先确认 CLI
|
|
110
|
+
2. 首次使用先确认 CLI 可用。XiaoE 环境不检查版本,直接执行:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
weaver-work-cli doctor --e10
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
非 XiaoE 环境执行:
|
|
94
117
|
|
|
95
118
|
```text
|
|
96
119
|
weaver-work-cli --version
|
|
97
120
|
weaver-work-cli doctor --e10
|
|
98
121
|
```
|
|
99
122
|
|
|
100
|
-
如果命令不可用(尤其是 `command not found` 或退出码 127
|
|
123
|
+
如果命令不可用(尤其是 `command not found` 或退出码 127),XiaoE 环境按本 Skill 的全局覆盖规则停止并反馈客户端运行时异常;非 XiaoE 环境先读 [`weaver-e10-installation.md`](references/weaver-e10-installation.md):先区分「已安装但不在 PATH」与「未安装」(前者只需把全局 bin 目录前置到 PATH,不要重装),确认未安装后再让用户选择 npm 源安装或本地代码安装;本地代码必须提供仓库目录。用户明确同意后才执行 `npm install -g weaver-work-cli`、`npm install`、`npm run build` 或 `npm link`。
|
|
101
124
|
|
|
102
125
|
3. 业务输入只描述业务对象和意图。认证、Cookie、ETEAMSID、业务 Token、接口地址和回查细节都由 CLI 托管。调用业务 operation 时,简单 JSON 优先使用 `--input-json '<json>'`;多步传递优先用 shell 变量,超大结果用 `--input-ref <refId>`,不要把上一步 stdout 写入临时文件再作为下一步输入。`--input <path>` 只用于用户提供的 JSON 文件或明确的文件业务输入;复杂 JSON 可在确有需要时使用,不能用它中转 CLI 上一步的输出。只有确认当前 shell 能稳定传管道时才使用 `--input -`。生成或改写 docs、reference、提示词和命令示例时,必须同时兼容 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 写法。
|
|
103
126
|
|
|
@@ -107,7 +130,7 @@ weaver-work-cli doctor --e10
|
|
|
107
130
|
|
|
108
131
|
5. 涉及附件、图片、本地文件、远程 URL 文件或文件内容解析的操作,执行前必须先向用户说明:文件内容可能会被上传到业务系统、OCR/解析服务,并可能进入当前大模型上下文用于理解和处理。必须等待用户明确确认后,才继续上传、读取、解析、OCR、导入或复用已上传文件对象;用户未确认时只说明风险和所需确认,不执行相关命令。
|
|
109
132
|
|
|
110
|
-
6. **同名不同包不要混用**:环境中可能并存另一个独立的 E10 登录 CLI(例如 `e10-login`,版本号可能带 `xiaoe` 后缀),它提供登录与状态查询,但其登录态**不会**被 `weaver-work-cli`
|
|
133
|
+
6. **同名不同包不要混用**:环境中可能并存另一个独立的 E10 登录 CLI(例如 `e10-login`,版本号可能带 `xiaoe` 后缀),它提供登录与状态查询,但其登录态**不会**被 `weaver-work-cli` 复用。非 XiaoE 环境的 CLI 可用性以 `weaver-work-cli --version` 为凭;XiaoE 环境跳过版本检查,以 `doctor --e10` 或实际业务命令的结果为凭。登录态一律以 `weaver-work-cli auth status --no-check` / `doctor --e10` 为凭;不得因为另一个 CLI 显示已登录就判定本 CLI 可用,也不要用另一个 CLI 的输出替代本 CLI 的认证结论。
|
|
111
134
|
|
|
112
135
|
## 超时与重试预算
|
|
113
136
|
|
|
@@ -115,7 +138,7 @@ weaver-work-cli doctor --e10
|
|
|
115
138
|
|
|
116
139
|
| 命令类别 | 单次超时预算 | 重试策略 |
|
|
117
140
|
| --- | --- | --- |
|
|
118
|
-
| 登录类(`auth xiaoe` / `auth login` / `auth set`) | 300 秒(5 分钟,后台运行 + 限时观察) |
|
|
141
|
+
| 登录类(`auth xiaoe` / `auth login` / `auth set`) | 300 秒(5 分钟,后台运行 + 限时观察) | Agent 不自动重跑登录命令;XiaoE 业务请求收到明确认证拒绝时,CLI 内部只静默恢复 1 次 |
|
|
119
142
|
| 只读业务查询(list / get / schema / preview) | 120 秒 | 最多 1 次;仅在网络类错误且未产生副作用时 |
|
|
120
143
|
| 写入类(prepare / apply / import / update / delete) | 600 秒(10 分钟) | **禁止自动重试**(存在重复入账/重复提交风险);结果不确定时只补一次只读回查 |
|
|
121
144
|
| 安装与构建(`npm install` / `npm run build` / `npm link`) | 1800 秒(30 分钟) | 禁止自动重试;失败即停止并报告,不加 `sudo` |
|
|
@@ -147,7 +170,7 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
147
170
|
|
|
148
171
|
登录与会话统一由 `weaver-e10-shared` 共享规则和 `weaver-work-cli auth ...` 命令体系托管;业务 Skill 不得自建登录流程,也不得读取、打印、转存任何认证目录或凭证。
|
|
149
172
|
|
|
150
|
-
返回 `partial`、`write_uncertain
|
|
173
|
+
返回 `partial`、`write_uncertain`、回查失败或网络中断时,立即停止当前写流程,不自动重试写入或删除。唯一例外是 XiaoE 公共请求层收到明确的认证拒绝(请求尚未进入业务处理)时,可静默恢复会话并原样重放 1 次;若恢复失败、重放后仍失效、身份变化或请求体不可重放,则立即停止。
|
|
151
174
|
|
|
152
175
|
当前 CLI 的普通大小 JSON 输出是完整 envelope;超过预算时会暂存完整结果,并在 stdout 返回精简摘要和 `refId`。CLI 没有飞书 CLI 那种通用 `--jq`、`--format table/ndjson` 或 `--page-all`。列表、详情、OCR、导出等可能产生大响应时,必须先读 [`json-output-contract.md`](references/json-output-contract.md) 的“大结果渲染与提效规则”:默认小页读取、只保留任务所需字段、分页有预算,回复用户时给摘要,不要原样粘贴超长 JSON。
|
|
153
176
|
|
|
@@ -175,8 +198,8 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
175
198
|
|
|
176
199
|
5. 不能猜测 CLI 未暴露的内部字段、接口路径、ID 解析逻辑或回查语义。
|
|
177
200
|
|
|
178
|
-
6. 未登录或登录失效(`authentication` / `session_expired` / `auth status` 未登录)时,Agent 若已根据桌面端明确上下文或网页端原有环境变量规则判定为 XiaoE
|
|
201
|
+
6. 未登录或登录失效(`authentication` / `session_expired` / `auth status` 未登录)时,Agent 若已根据桌面端明确上下文或网页端原有环境变量规则判定为 XiaoE,必须运行 `weaver-work-cli auth xiaoe` 尝试统一登录;统一登录不可用时必须反馈 CLI 原因并停止。任意系统都不得把 `xiaoe_credential_unavailable` 改成浏览器 OAuth、本地终端操作或其他登录 Skill。仅非 XiaoE 环境在用户确认真实 E10 域名后运行 `auth login`,并必须传入 `--agent_type "<当前智能体名称>"`,让授权确认页展示发起登录验证的智能体;**禁止**使用示例占位域名登录,也禁止在拿到域名前反复重试业务命令。具体流程读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
179
202
|
|
|
180
203
|
7. 附件、图片上传或文件解析属于敏感数据处理。即便 operation 风险等级不是高风险写入,也必须先取得用户对“文件内容可能进入大模型/外部解析服务”的明确确认;不能把用户仅提供文件路径或文件名视为同意解析或上传。
|
|
181
204
|
|
|
182
|
-
8. Agent 明确选择 `auth xiaoe` 后,CLI 按顺序从平台注入凭证(Node 换票后由 CLI npm 包自带 `xiaoe_env.py` 兼容回退)、宿主 `xiaoeUserData/tokens.py`、内置原生实现读取的桌面 XiaoE 客户端会话(宿主注入路径优先、默认 `XiaoE/Robots/<id>/user_settings.json` 回退)、`WEAVER_XIAOE_*` 环境映射读取支持统一登录的凭证(宿主不会注入 ETEAMSID 环境变量)。桌面会话有效时 Node 可直接换票,不要求存在 `tokens.py`;shared Skill 也不携带任何 Token 脚本。`XIAOE_DOMAIN` 仅是 XiaoE/erpa 换票服务地址;E10 目标按显式参数、专用 E10 配置/映射、当前 profile、CLI
|
|
205
|
+
8. Agent 明确选择 `auth xiaoe` 后,CLI 按顺序从平台注入凭证(Node 换票后由 CLI npm 包自带 `xiaoe_env.py` 兼容回退)、宿主 `xiaoeUserData/tokens.py`、内置原生实现读取的桌面 XiaoE 客户端会话(宿主注入路径优先、默认 `XiaoE/Robots/<id>/user_settings.json` 回退)、`WEAVER_XIAOE_*` 环境映射读取支持统一登录的凭证(宿主不会注入 ETEAMSID 环境变量)。桌面会话有效时 Node 可直接换票,不要求存在 `tokens.py`;shared Skill 也不携带任何 Token 脚本。`XIAOE_DOMAIN` 仅是 XiaoE/erpa 换票服务地址;E10 目标按显式参数、专用 E10 配置/映射、当前 profile、CLI 默认值的顺序解析。业务命令不会在首次无会话时自动登录,但已有会话被接口明确拒绝时会静默恢复 1 次;桌面端需要 XiaoE 专属业务行为时,Agent 必须添加 `--runtime-agent xiaoe`,命令进程中存在任意 `XIAOE_*` 变量时也会直接识别为 XiaoE。不要要求用户提供、展示或手动设置这些凭证。任意系统失败时都反馈结构化错误,不自动降级浏览器。
|
|
@@ -29,6 +29,8 @@ weaver-work-cli auth whoami
|
|
|
29
29
|
- 业务命令失败,stderr JSON 中 `error.type === "authentication"`(如 `E10 auth not found`)
|
|
30
30
|
- 业务命令返回 `error.subtype === "session_expired"`(E10 登录态 401/302 失效)
|
|
31
31
|
|
|
32
|
+
CLI 的认证错误只是状态信号,不是登录命令。`error.message` 和业务 Skill 的错误分支不得指定 `auth login`、`auth xiaoe` 或其参数;Agent 必须先判定当前宿主环境,再按下述流程自行选择认证方式。
|
|
33
|
+
|
|
32
34
|
此时**禁止**:
|
|
33
35
|
|
|
34
36
|
- 使用示例占位域名(如 `https://weapp.xxx.cn`)或自行猜测域名执行登录
|
|
@@ -43,17 +45,18 @@ weaver-work-cli auth whoami
|
|
|
43
45
|
weaver-work-cli auth xiaoe
|
|
44
46
|
```
|
|
45
47
|
本机存在 `xiaoeUserData/tokens.py`、XiaoE 客户端目录、工作目录或历史登录,都不能作为宿主身份依据。桌面客户端可由 `--runtime-agent xiaoe` 标识;命令进程中存在任意 `XIAOE_*` 变量时也直接标识为 XiaoE。未命中这两类判断的 WorkBuddy、Codex 及其他智能体必须跳过此步,进入下方浏览器 OAuth 流程。
|
|
46
|
-
CLI 会按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile `config.baseUrl` → CLI 内置默认值”解析 E10 登录域名;`XIAOE_DOMAIN` 只作为 XiaoE/erpa 换票服务地址。`auth xiaoe` 命令本身即代表 Agent 已选择 XiaoE 认证,CLI
|
|
48
|
+
CLI 会按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile `config.baseUrl` → CLI 内置默认值”解析 E10 登录域名;`XIAOE_DOMAIN` 只作为 XiaoE/erpa 换票服务地址。`auth xiaoe` 命令本身即代表 Agent 已选择 XiaoE 认证,CLI 只负责发现和消费凭据。业务命令不会在缺少本地会话时主动登录;已有会话被接口明确拒绝为失效时,公共请求层会静默恢复并重放一次。桌面客户端需要 XiaoE 专属业务行为时,Agent 在业务命令上显式添加全局参数 `--runtime-agent xiaoe`,命令进程中存在任意 `XIAOE_*` 变量时也会自动识别。统一登录失败时返回认证错误并停止,任何操作系统都不自动进入浏览器流程。Agent 不得因为本地存在旧 profile 就跳过 XiaoE 认证规则,不得调用任何其他登录 Skill,也不得要求用户提供或展示 `XIAOE_*` / ETEAMSID。
|
|
47
49
|
|
|
48
|
-
1.
|
|
50
|
+
1. **仅非 XiaoE 环境进入本步**。禁止先执行 `auth xiaoe` 或调用其他登录 Skill。先调用宿主提供的提问 / 弹框能力询问用户,让用户二选一:
|
|
49
51
|
- 输入本次要登录的 E10 登录域名(base URL),形如 `https://<企业域名>`;或
|
|
50
52
|
- 从已有 profile 中选择一个已登录环境:先运行 `weaver-work-cli auth profile list` 列出候选,让用户选择。
|
|
51
53
|
2. 用户提供了**新域名**时,用真实域名执行浏览器 OAuth 登录:
|
|
52
54
|
```text
|
|
53
55
|
weaver-work-cli auth login --base-url "<用户输入的域名>" --agent_type "<当前智能体名称>"
|
|
54
56
|
```
|
|
57
|
+
该分支仅用于非 XiaoE 环境;不得先执行 `auth xiaoe`,也不得改调其他登录 Skill。
|
|
55
58
|
端口冲突时加 `--port 19801`。
|
|
56
|
-
3.
|
|
59
|
+
3. 用户明确要求切换到**已有且仍有效的 profile** 时,切换后验证登录态;这不是失效会话的替代登录方式:
|
|
57
60
|
```text
|
|
58
61
|
weaver-work-cli auth profile use PROFILE_NAME
|
|
59
62
|
weaver-work-cli auth status
|
|
@@ -67,8 +70,8 @@ weaver-work-cli auth whoami
|
|
|
67
70
|
`auth login` 会在本机 `127.0.0.1:19800` 监听浏览器回调,最长等待 5 分钟。Agent 沙箱/托管环境中的外部浏览器无法回调容器内地址。`auth xiaoe` 不会进入这条浏览器流程。执行规则:
|
|
68
71
|
|
|
69
72
|
1. 任意系统运行 `auth xiaoe` 时,收到 `xiaoe_credential_unavailable` 即反馈并停止;不要自动改跑 `auth login`。
|
|
70
|
-
2.
|
|
71
|
-
3.
|
|
73
|
+
2. 仅非 XiaoE 环境在用户确认真实 E10 域名且确认 CLI 与浏览器同机后执行 `auth login`;仍须限时等待,超时未完成即终止并反馈。
|
|
74
|
+
3. 仅非 XiaoE 环境在用户无法完成浏览器登录、且明确要求并同意人工录入时,才可使用保底方式 `weaver-work-cli auth set --eteamsid "<ETEAMSID>" --base-url "<用户确认的登录域名>"`;它不是业务认证错误的默认恢复路径。ETEAMSID 由用户从已登录浏览器主动提供,Agent 不得索取、展示或转述该值。
|
|
72
75
|
4. 严禁不加限制地前台运行 `auth xiaoe` / `auth login` 并等待 OAuth 回调。
|
|
73
76
|
|
|
74
77
|
## 登录
|
|
@@ -113,9 +116,9 @@ weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_ty
|
|
|
113
116
|
本地文件 URL。“始终打开”偏好保存在当前本地回调地址的浏览器存储中;未识别到返回协议
|
|
114
117
|
时,页面只提示用户手动返回智能体或终端。本地 CLI 打开通道默认保留 15 分钟;通道结束
|
|
115
118
|
后页面会自动退回浏览器自定义协议打开方式,不直接显示网络请求错误。
|
|
116
|
-
智能小 E 统一登录不会经过浏览器,也不会显示“返回智能小 E
|
|
119
|
+
智能小 E 统一登录不会经过浏览器,也不会显示“返回智能小 E”弹层;该弹层只属于非 XiaoE 环境发起的 `auth login` 浏览器 OAuth。
|
|
117
120
|
|
|
118
|
-
|
|
121
|
+
仅非 XiaoE 环境在用户明确要求时,保底方式才是让用户手动写入浏览器中的 `ETEAMSID`:
|
|
119
122
|
|
|
120
123
|
```text
|
|
121
124
|
weaver-work-cli auth set --eteamsid "PCACCOUNT_xxx" --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
|
|
@@ -138,7 +141,7 @@ weaver-work-cli --profile PROFILE_NAME auth status --no-check
|
|
|
138
141
|
|
|
139
142
|
## XiaoE 凭据由 CLI 独占处理
|
|
140
143
|
|
|
141
|
-
运行 `auth xiaoe
|
|
144
|
+
运行 `auth xiaoe`,或已登录的 XiaoE 业务请求被 E10 明确拒绝为会话失效时,CLI 按以下顺序自行取凭据,Agent **不参与、也不得复现**。后者全程静默、合并同一 profile 的并发恢复,并最多重放原请求 1 次;流式请求、网络错误、`partial` / `write_uncertain` 均不触发重放:
|
|
142
145
|
|
|
143
146
|
1. **平台注入凭据**:`XIAOE_USER_TOKEN` + `XIAOE_DOMAIN`(小 e 业务服务地址)。先由 Node 直接换票;失败时 CLI 可调用 npm 包自带的 `scripts/xiaoe_env.py` 兼容换票。脚本不属于 Skill,由 CLI 内部执行、解析并隐藏凭证 stdout。
|
|
144
147
|
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` 指定解释器。
|
|
@@ -32,7 +32,7 @@ error.stage = xiaoe_unified_login
|
|
|
32
32
|
|
|
33
33
|
收到该错误后,反馈宿主登录态或凭据注入不可用并停止。不要自动执行 `auth login`,也不要要求用户在本地终端重复执行登录。
|
|
34
34
|
|
|
35
|
-
`auth xiaoe`
|
|
35
|
+
`auth xiaoe` 不会自动降级到浏览器;当前任务已判定为 XiaoE 时不得另行执行 `auth login` 或调用其他登录 Skill。只有非 XiaoE 环境进入 `auth login` 流程时,才可能出现下列浏览器 OAuth 信号:
|
|
36
36
|
|
|
37
37
|
| 浏览器 OAuth 信号 | 含义 |
|
|
38
38
|
| --- | --- |
|
|
@@ -45,8 +45,8 @@ error.stage = xiaoe_unified_login
|
|
|
45
45
|
|
|
46
46
|
1. **立即终止**该命令,不要等待本地回调。
|
|
47
47
|
2. 向用户反馈浏览器 OAuth 在当前环境无法完成本地回调的实际原因。
|
|
48
|
-
3.
|
|
49
|
-
4.
|
|
48
|
+
3. 不自动给出“去本地终端执行”的操作;仅非 XiaoE 环境可说明浏览器授权必须在 CLI 与浏览器同机的环境执行。
|
|
49
|
+
4. 仅非 XiaoE 环境且用户明确要求保底方式时,可说明 `auth set`,但 Agent 不得索取、展示、转述或记录 ETEAMSID:
|
|
50
50
|
```text
|
|
51
51
|
weaver-work-cli auth set --eteamsid "<ETEAMSID>" --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"
|
|
52
52
|
```
|
|
@@ -64,7 +64,7 @@ weaver-work-cli auth xiaoe --base-url "<用户确认的 E10 域名>"
|
|
|
64
64
|
判定结论与处置:
|
|
65
65
|
|
|
66
66
|
- 域名与网络**不是**失败原因,不要再反复更换域名重试。
|
|
67
|
-
- 这属于宿主登录态、凭据注入或当前 CLI
|
|
67
|
+
- 这属于宿主登录态、凭据注入或当前 CLI 消费凭证的异常;停止并反馈。XiaoE 环境不执行 `weaver-work-cli --version`,版本检查更新由客户端负责。
|
|
68
68
|
- 不要因为一次认证失败就断言 CLI 不可用;只读诊断命令(`auth status --no-check`、`doctor --e10`)仍可作为环境检查手段。
|
|
69
69
|
|
|
70
70
|
## 可写性相关说明
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# 安装与可用性检查
|
|
2
2
|
|
|
3
|
+
> **XiaoE 例外(覆盖全文)**:本任务已判定为 XiaoE 时,不执行本文任何 `weaver-work-cli --version`、`npm view weaver-work-cli version`、npm 安装或升级步骤。CLI 的检查更新由 XiaoE 客户端负责;直接进入登录态诊断或业务命令。若命令不存在或明确报告版本不兼容,停止并反馈 XiaoE 客户端运行时异常。
|
|
4
|
+
|
|
3
5
|
## 什么时候读取
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
仅非 XiaoE 环境在命令不可用、版本不确定、用户刚安装、全局命令可能指向旧版本,或需要确认当前安装包含哪些 Agent Skill 时读取本文件。XiaoE 环境只在命令异常时读取上面的覆盖规则并停止,不进入手工安装流程。
|
|
6
8
|
|
|
7
9
|
## 检查命令
|
|
8
10
|
|
|
@@ -113,7 +113,12 @@ Agent 不得自行拼接、改写或向用户索取上述凭证(禁止要求
|
|
|
113
113
|
- **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个 operation**
|
|
114
114
|
- 写请求已经发出后,遇到结果不确定必须停止;不要把 `.apply` 当成可重试读操作
|
|
115
115
|
- 下载是异步任务,`.apply` 会持续轮询进度;不要因为等待时间长就中断重放
|
|
116
|
-
- **错误为 `authentication` 或 `session_expired` 时:立即停止当前操作,不要用示例占位域名或自行猜域名登录,也不要盲目重试**。先读取共享规则 `../weaver-e10-shared/references/e10-auth-and-session.md
|
|
116
|
+
- **错误为 `authentication` 或 `session_expired` 时:立即停止当前操作,不要用示例占位域名或自行猜域名登录,也不要盲目重试**。先读取共享规则 `../weaver-e10-shared/references/e10-auth-and-session.md`。
|
|
117
|
+
- 登录失效的认证方式必须由 Agent 复用本任务开始时的宿主判定,禁止调用任何其他登录 Skill。
|
|
118
|
+
- 明确为 XiaoE 时,只执行 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。
|
|
119
|
+
- 统一登录返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用,不自动回退浏览器登录。
|
|
120
|
+
- 非 XiaoE 时不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
|
|
121
|
+
- 登录恢复后读操作可重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial/write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
117
122
|
|
|
118
123
|
### 4) 附件、图片和文件解析确认
|
|
119
124
|
|
|
@@ -323,7 +323,7 @@
|
|
|
323
323
|
}
|
|
324
324
|
},
|
|
325
325
|
"artifactBaseline": {
|
|
326
|
-
"aggregateSha256": "
|
|
326
|
+
"aggregateSha256": "83f35c2f01d10c90a94c9770d58ee0b110bca65651229360e3d58891d7a4c322",
|
|
327
327
|
"files": [
|
|
328
328
|
{
|
|
329
329
|
"path": "src/shortcuts/archive/continuation.ts",
|
|
@@ -427,8 +427,8 @@
|
|
|
427
427
|
},
|
|
428
428
|
{
|
|
429
429
|
"path": "skills/weaver-e10-wenshuding/SKILL.md",
|
|
430
|
-
"size":
|
|
431
|
-
"sha256": "
|
|
430
|
+
"size": 18173,
|
|
431
|
+
"sha256": "e82a3d28e3095241e892181fd40719cfb03ef6e266a1a23c3b8b07a613171b60"
|
|
432
432
|
},
|
|
433
433
|
{
|
|
434
434
|
"path": "skill-template/product.json",
|
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
|
|
16
16
|
| 步 | 命令 | 做什么 |
|
|
17
17
|
| --- | --- | --- |
|
|
18
|
-
| 1 | `workflow.createForm` | 用用户说法解析可发起的工作流并**加载表单字段**:拿回 `fields`(**每个能填的字段一行**,有默认值的字段带 `initialValue`)、`continuation`(下一步的 `context
|
|
19
|
-
| 2 | `workflow.createRequest` |
|
|
18
|
+
| 1 | `workflow.createForm` | 用用户说法解析可发起的工作流并**加载表单字段**:拿回 `fields`(**每个能填的字段一行**,有默认值的字段带 `initialValue`)、`historyRequestData`(历史参考值)、`systemFields`(标题/紧急程度/密级的默认值与选项)、`continuation`(下一步的 `context`)。**它只取数、不填参**——字段值由你按「填值纪律」自己拼 |
|
|
19
|
+
| 2 | `workflow.createRequest` | 按「填值纪律」把第 1 步取到的字段拼成 `data`(附件/发票字段先上传,再把返回对象放进 `data`),连同 `context` 一起传 |
|
|
20
20
|
| 3 | —(无命令) | **把第 2 步的返回结果输出给用户**:返回结果里有 `finalMarkdown` 就把**它的内容整段原样输出**——**不要解释、不要改写、也不要补内容**。小e 环境(`BROWSER_FILL`)的 `finalMarkdown` 是一段 `<browsertool>` 标签块,同样**整段原样输出**(从 `<browsertool>` 到 `</browsertool>`:**不要用代码块(三反引号)包裹、不要加任何前后说明、不要解析它**);没有 `finalMarkdown`(如 `NEEDS_CONFIRMATION`)才按「主表(已填内容)展示规则」+「明细表(子表单)展示规则」自己拼。**不要重跑任何命令、不要自己再去查一遍流程。** |
|
|
21
21
|
|
|
22
22
|
澄清、必填缺失、幂等重放等分支见下「发起链路」。
|
|
23
23
|
|
|
24
24
|
## 发起链路(两条命令的完整分支)
|
|
25
25
|
|
|
26
|
-
1. `workflow.createForm`:按用户说法解析可发起的工作流并载入表单,拿回 `continuation`(表单会话短句柄,载荷由 CLI 托管在本机)与 `fields`(**每个能填的字段一行**:`id` + 中文名 `name` + 所属明细 `subFormId`(主表字段省略该键)+ `componentKey`;**有默认值的字段直接带 `initialValue
|
|
27
|
-
-
|
|
28
|
-
-
|
|
26
|
+
1. `workflow.createForm`:按用户说法解析可发起的工作流并载入表单,拿回 `continuation`(表单会话短句柄,载荷由 CLI 托管在本机)与 `fields`(**每个能填的字段一行**:`id` + 中文名 `name` + 所属明细 `subFormId`(主表字段省略该键)+ `componentKey`;**有默认值的字段直接带 `initialValue`**),同时带回 `historyRequestData`(历史参考值)与 `systemFields`(系统字段的默认值与选项)。**它只取数、不填参**:
|
|
27
|
+
- 字段值由你按「填值纪律」自己拼:用户说了的照用户说的填;带 `initialValue` 的可以干脆不传(CLI 自动并入);其余字段按「历史流程数据参考规则」判断能不能落值;
|
|
28
|
+
- 拼之前先看 **`historyRequestData`**(本表单要落值的字段在历史流程里的取值参考,`null` = 没有可参考的)与 `systemFields`(标题/紧急程度/密级的默认值与选项);
|
|
29
29
|
- 返回 `NEEDS_CLARIFICATION` 时按 `candidates` 向用户确认(只问完整名称或其它可用于检索的关键词,**不要向用户索取 ID**),确认后由你按 `名称(ID)` 拼好、重发**同一条命令**。
|
|
30
|
-
2.
|
|
30
|
+
2. 按用户意图把字段值填进 `data`(键用字段 id):**照「填值纪律」的优先级逐个字段一遍定案**——用户说了的照用户说的填;用户没说到、而该字段带 `initialValue` 的就用默认值(也可以干脆不传,CLI 会自动并入);其余字段按「历史流程数据参考规则」判断能不能落值。
|
|
31
31
|
3. `workflow.createRequest`:`context` 传第 1 步返回的 `continuation`,`action` 按用户意图取 `draft`/`submit`。
|
|
32
32
|
- `action: "submit"` 且仍有必填缺失 → **命令不会创建流程**,返回 `NEEDS_INPUT` + `missingFields` + **渲染好的 `finalMarkdown`**(已填内容 + 明细 + 待补必填项清单;**历史取值一致的待补字段,命令已附一行 `历史推荐值`**);**不做任何值推断**——**把这份 `finalMarkdown` 原样发出**(与成功时完全同一口径:不弹窗、不挑字段、不自己列待补项、不解释),带同一 `context` 重发 `action: "submit"`。
|
|
33
33
|
- `action: "draft"` 且仍有必填缺失 → 照常建草稿,`missingFields` 只作提醒(必须原样转述给用户)。
|
|
@@ -45,44 +45,22 @@
|
|
|
45
45
|
|
|
46
46
|
**输出纪律(与上面的省时纪律同理:多写的每一句都在拖长回复,并让用户看不懂)**:① 面向用户**只给三样**——"这次做了什么、结果如何" + "**已填内容预览**"(展示口径见下文「主表(已填内容)展示规则」)+ "需要用户提供什么",其余不说——**尤其不要交代"用了哪个流程 / 编号是多少 / 我是怎么判断的"这类内部依据**;② **不要复述自己的判断过程、取舍与推演**,也不要写自我批评或事后反省——用户要的是结果,不是你怎么想的;③ **不要把澄清分支的区别讲给用户**(如"不是有多个候选要挑,而是一条都没命中"):该报"系统里没有「XX」"就按下文浏览按钮口径直接说结论,**不要解释你是怎么判定出来的**;④ 需要用户给值时**只说清"要什么值"**,不要顺带解释"我为什么判断不出来"。
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## 附件 / 发票字段怎么填
|
|
49
49
|
|
|
50
|
-
`
|
|
50
|
+
`fields` 里 `isEinvoice=true` 的是发票字段、带 `fileUploadParams` 的是附件字段。给它们落值时**不要写字符串**,按类型走对应技能,把返回的对象直接放进 `data` 的该字段:
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### 情况一:用户本次没有发票 / 附件填写意图
|
|
55
|
-
|
|
56
|
-
`data` **原样**作为 `createRequest` 的 `data` 传进去,一个键都不用改、也不用补——字段值、明细行、标题都已经算好。
|
|
57
|
-
|
|
58
|
-
### 情况二:用户本次要传发票 / 附件
|
|
59
|
-
|
|
60
|
-
`data` 里对应字段的值会是一个**占位符**(原样字符串):
|
|
61
|
-
|
|
62
|
-
- `"file"` —— 这个附件字段需要你先上传文件再填入
|
|
63
|
-
- `"invoice"` —— 这个发票字段需要你先从票夹取发票再填入
|
|
64
|
-
|
|
65
|
-
**占位符不是真实值,直接提交会失败。**按类型走对应技能,再把返回的对象**原位替换**回 `data` 的该字段:
|
|
66
|
-
|
|
67
|
-
| 占位符 | 怎么做 | 替换成什么 |
|
|
52
|
+
| 字段类型 | 怎么做 | 填什么 |
|
|
68
53
|
| --- | --- | --- |
|
|
69
|
-
|
|
|
70
|
-
|
|
|
54
|
+
| 附件 | 用 `weaver-e10-caizhilian` 技能上传用户给的文件(`caizhilian.file-upload.prepare` → `.upload.prepare` → `.upload.apply`),拿到 `file_id` | `[{ "optionId": "<file_id>", "content": "<文件名>", "type": "file" }]`(多个文件就多项) |
|
|
55
|
+
| 发票 | 用 `weaver-e10-yepiaotong` 技能:用户发了票就上传(`invoice.upload`);用户说"从票夹取"就查票夹拿 `fid`,再取完整发票对象 | `[{ "optionId": "<fid>", "type": "einvoice", "optionObj": { <完整发票对象> } }]` |
|
|
71
56
|
|
|
72
|
-
|
|
57
|
+
两条纪律:
|
|
73
58
|
|
|
74
59
|
1. **上传前必须先告诉用户「文件会先经过公网大模型」,并等用户确认**——不能默默上传。
|
|
75
|
-
2.
|
|
76
|
-
3. 用户**没提到**的附件 / 发票字段,`data` 里本来就不会有,**不要自己去补**。
|
|
77
|
-
|
|
78
|
-
### 没有 `data` 的时候
|
|
79
|
-
|
|
80
|
-
返回里**没有** `data`(没传 `userQuestion`,或这次没能算出字段值),就按下面的「填值纪律」自己拼(此时会照常返回 `historyRequestData` / `systemFields`)。
|
|
60
|
+
2. 用户**没提到**的附件 / 发票字段**不要自己去补**(空着就行)。
|
|
81
61
|
|
|
82
62
|
## 填值纪律(一遍定案,不许回头)
|
|
83
63
|
|
|
84
|
-
> **仅在返回里没有 `data` 时适用**。有 `data` 就直接用(见「`data` 已填好时怎么用」),不要走下面这套逐字段推演。
|
|
85
|
-
|
|
86
64
|
拼 `data` 只走一遍:**按字段逐个落值,每个字段只做一次取舍、取完不再回头看**;落到值就离开这个字段,不在同一字段上比较第二轮。
|
|
87
65
|
|
|
88
66
|
**一趟走完、一个字段一行**——照这个形状(`<…>` 是占位,实写时换成本次的真字段与真值):
|
|
@@ -106,7 +84,7 @@
|
|
|
106
84
|
字段走完 → 拼 data → createRequest。
|
|
107
85
|
```
|
|
108
86
|
|
|
109
|
-
- **判决只有三种**:`填 "<值>"` / `不传` / `留空`——一行里只出现一个,不并列两个候选、不写"或者 / 可能 / 我倾向"。**唯一例外是附件 / 发票这两类**:它们的判决取决于"用户本轮有没有给文件"
|
|
87
|
+
- **判决只有三种**:`填 "<值>"` / `不传` / `留空`——一行里只出现一个,不并列两个候选、不写"或者 / 可能 / 我倾向"。**唯一例外是附件 / 发票这两类**:它们的判决取决于"用户本轮有没有给文件",按上面「附件 / 发票字段怎么填」写在**同一行**里(条件 + 各自一个结果),不拆成两行、不留到下一轮。
|
|
110
88
|
- **一行只看这个字段自己**:依据取用户本轮原话 / 它自己的 `initialValue` / 它自己的历史取值;这个字段的事在这一行里判完就离开,不顺手推演别的字段。
|
|
111
89
|
- **要按历史推演的,就在它这一行里推**:推出式子直接代成值写进判决,推完即走。
|
|
112
90
|
- **一个字段只出现一次判决**,后面不再回头改;字段过完就拼 `data`(判决为"填"的进 `data`,`不传` / `留空` 都不写),**紧接着 `createRequest`**。
|
|
@@ -167,8 +145,6 @@
|
|
|
167
145
|
| 参数 | 类型 | 必填 | 说明 |
|
|
168
146
|
| --- | --- | --- | --- |
|
|
169
147
|
| `workflow` | `string[]` | 是 | 工作流条件——`"名称(ID)"` / 纯名称 / 纯数字 ID;**可一次给多个说法**:数组多元素,或一个元素内用英文逗号分隔(两者完全等价) |
|
|
170
|
-
| `relatesTo` | `string` | 否 | 关联对象 id,**仅透传**,不影响表单初始化 |
|
|
171
|
-
| `userQuestion` | `string` | 否 | **用户的填单意图**(一句话概括,可以是多轮对话汇总后的最终需求,如"帮我发起一条9月手机话费报销流程,报销金额是100元")。**传了才可能拿到 `data`**(返回里带 `data` 就直接用它;不带就自己拼)。**强烈建议每次发起都传**。**只在这里传这一次**,后续 `createRequest` 不要再传 |
|
|
172
148
|
|
|
173
149
|
- **自带显式 ID(`"名称(ID)"` 或纯数字)时不查可发起列表**:流程名与"你能不能发起"都由表单载入接口直接给出,因此比"按名称解析"少一整次往返。该 ID 不可用时仍回澄清,但会带 `clarificationReason` 说明是**哪一种**(见下)。
|
|
174
150
|
- **纯名称**按当前用户**可发起**的工作流做模糊匹配,**可一次给多个说法**:数组多个元素(`["<说法1>","<说法2>"]`)与一个元素内用英文逗号分隔(`["<说法1>,<说法2>"]`)**完全等价**,CLI 会把各说法拆成关键词、命中取并集去重。
|
|
@@ -196,8 +172,8 @@
|
|
|
196
172
|
| `data` | `object` | 是 | 表单字段值,结构 `{"main":{...},"details":{"<subFormId>":[{...}]}}`;键**必须是字段 id** |
|
|
197
173
|
| `action` | `"draft"` \| `"submit"` | 是 | `submit`=提交审批(必填缺失阻断,返回 `NEEDS_INPUT`,**不创建流程**);`draft`=仅保存草稿(必填缺失不阻断、状态仍是 `CREATED`,但 `missingFields` 仍随结果返回) |
|
|
198
174
|
| `requestName` | `string` | 否 | 流程标题。**通常不用传**——`createForm` 已给出标题、CLI 会自动并入;只有用户本次明确改写了标题时才传 |
|
|
199
|
-
| `requestLevel` | `string` | 否 |
|
|
200
|
-
| `secLevel` | `string` | 否 |
|
|
175
|
+
| `requestLevel` | `string` | 否 | 紧急程度:用户原话即可(如「紧急」「普通」),CLI 按 `systemFields.levelOptions` 的选项名归一成 code;说不出就不传,走表单默认值 |
|
|
176
|
+
| `secLevel` | `string` | 否 | 密级:用户原话即可(如「机密」「公开」),CLI 按 `systemFields.secLevelOptions` 的选项名归一成 id;说不出就不传,走表单默认值 |
|
|
201
177
|
| `remark` | `string` | 否 | 签字意见 |
|
|
202
178
|
| `verificationConfirmed` | `boolean` | 否 | 节点字段校验需用户确认时显式确认继续提交 |
|
|
203
179
|
|
|
@@ -216,15 +192,14 @@
|
|
|
216
192
|
| `workflow` | `{id, name, description, type_name, selectionSource}`;`selectionSource` 见「输入」 |
|
|
217
193
|
| `form` | `{id, layout_id}` |
|
|
218
194
|
| `fields` | **字段清单(唯一一份)**:所有「可编辑 ∪ 必填且可见」的字段,每个字段一条记录(**整块在 stdout 上压成单行**,见下),见下 |
|
|
219
|
-
| `
|
|
220
|
-
| `
|
|
221
|
-
| `
|
|
222
|
-
| `systemFieldWarning` | **仅在返回里没有 `data` 时出现**:系统字段权限读取失败时的提示文本(正常为 `null`) |
|
|
195
|
+
| `historyRequestData` | 本表单**要落值的字段**(口径同 `fields`)在历史流程里的取值参考(`null` = 没有可参考的),见下 |
|
|
196
|
+
| `systemFields` | `{permissions, defaults, levelOptions, secLevelOptions}`——系统字段的权限与默认值,见下 |
|
|
197
|
+
| `systemFieldWarning` | 系统字段权限读取失败时的提示文本(正常为 `null`) |
|
|
223
198
|
| `requiredInfoWarning` | OA 未下发静态字段权限时的告警文本(正常为 `null`),见「注意」 |
|
|
224
199
|
| `workflowMemory` | 这条工作流维度的记忆(一段 Markdown 文本);**读不到时没有这个键**,见下 |
|
|
225
200
|
| `fileUploadParams` | 附件字段的上传限制,挂在对应字段的 `fields[].fileUploadParams` 上 |
|
|
226
201
|
|
|
227
|
-
**stdout 紧凑形态**:`fields` / `
|
|
202
|
+
**stdout 紧凑形态**:`fields` / `historyRequestData` / `systemFields` 这几个键在 stdout 上是**压成单行的**——只去掉缩进空白,**内容、结构、键序一字不改**(`parse` 出来与多行版完全一致,可以直接读)。所以 `fields` 那一行字段多时可能上万字符:**这是正常的,不是被截断、也不是数据缺失**,照常按 JSON 解析即可。**不要**因为"这一行太长 / 看着不像完整 JSON"就去读 `resultFile` 或重跑命令;`contextId` / `workflow` 等其余键仍是正常的多行缩进。
|
|
228
203
|
|
|
229
204
|
**`fields[]` 每个字段的键**(**能出现在这里就是能填的字段**):
|
|
230
205
|
|
|
@@ -245,14 +220,14 @@
|
|
|
245
220
|
|
|
246
221
|
**`fields` 为什么不区分必填**:它就是「可编辑 ∪ 必填且可见」的全集,**「哪些字段可以落值」= 本清单,「哪个必填还没值」= `createRequest` 的 `missingFields`**,只有这两句口径。用户看不到、改不了的字段(只读 / 禁止编辑 / 联动隐藏 / 落在布局隐藏行上 / 落在明细表隐藏列上 / 落在多内容单元格的隐藏格上 / 不在当前布局的展示配置里)**不下发**——所以**条数不多是正常的**,不要拿它当"页面上肉眼可见的字段数",也不要因为"表单上看着没这么多"就怀疑字段清单不对。
|
|
247
222
|
|
|
248
|
-
**`historyRequestData
|
|
223
|
+
**`historyRequestData`(历史参考值)**:范围是**本工作流**、**近一年、非草稿、按发起时间倒序的前 5 条**「我发起的」流程——不是"所有流程混在一起",所以里面每条都是同一张表单的单据,字段可直接对照;形如 `[{requestName, requestId, createdatetime, fieldValues: {<字段id>: <值>}}]`——`fieldValues` 是**「字段id → 值」的映射**(字段名不随每条记录重复下发:同一个名字要在每条记录里打印一遍,要名字请用 `fields`);值已按字段类型给出**可直接复用**的写法——浏览按钮 / 选项类为 `名称(id)`(多值以 `、` 分隔);**附件类为对象**(形如 `{"formField":{"id":"<字段id>"},"dataOptions":[{"optionId":"<附件ID>","content":"<文件名>","type":"<文件类型>"}]}`,可整块放进 `data`,见「历史流程数据参考规则」第三条);其余为普通字符串。**`null` 表示没有可参考的历史数据**(不返回空数组);某条历史流程在这批字段上一个值都没命中时会被整条剔除(所以条数可能少于 5)。**你不需要自己再去查历史流程。** 它给的是**本表单要落值的字段**(口径同 `fields`)的取值——填 `data` 时用它把能补的字段补上,判断口径见「历史流程数据参考规则」。
|
|
249
224
|
- **`createRequest` 一侧没有它**:`NEEDS_INPUT` / `NEEDS_CONFIRMATION` 时**手上没有任何历史值**,必填缺失直接**一次问齐用户**(`NEEDS_INPUT` 用命令给的 `finalMarkdown`,见「createRequest 返回后的处置」)——**不要**回头翻 `createForm` 阶段那份历史值、也不要凭印象补值。
|
|
250
225
|
|
|
251
|
-
**`systemFields
|
|
226
|
+
**`systemFields`**:`permissions` 给各系统字段的 isview/isedit/ismandatory,`defaults` 是默认值,`levelOptions`/`secLevelOptions` 是紧急程度/密级选项。**只有 `isview=true` 且 `isedit=true` 的系统字段才需要填**;紧急程度/密级**用户说了原话就直接传原话**(CLI 会按选项名归一成编码),CLI 归不出来时会原样透传;**不得用记忆里的常用值、其它字段内容或自行编造的编码代替用户原话**;**`defaults` 已有非空值即视为已满足,不要询问用户、直接采用**;仅当 ismandatory=true 且默认值为空时才需要用户提供。
|
|
252
227
|
|
|
253
228
|
**`workflowMemory`**:这条工作流维度的记忆,一段 Markdown 文本。它**只含该工作流那一段**——全局画像 / 全局别名(`user.md` / `memory.md`)已由入口的 `workflow.memoryPrompt`(无参)给过,这里不再重复下发,所以**不要再调一次无参 `memoryPrompt` 来"补全"、也不要把两份拼接**(会重复)。**返回里没有这个键** ⇒ 该工作流还没有记忆(或没读到)——**按新用户处理,不要重试读取**。有这个键时,**只能用它补用户没提到的非必填字段或口径类信息**(如签字意见口径、展示偏好);**必填字段一律不得用它里面的"常用值"补**——必填缺失只由 `missingFields` 告知、直接一次问齐用户(见「createRequest 返回后的处置」),不要为"能不能用记忆里的值"反复权衡;与用户本次明说的冲突时以用户本次为准。
|
|
254
229
|
|
|
255
|
-
**大表单超线形态**(`createForm` 输出**超过 20,000 字符**时才有):此时 stdout **只回一句话**——「当前表单内容较大,已临时写入文件 `resultFile路径`,请直接读取 `resultFile路径` 获取完整结果」。**`fields`、`
|
|
230
|
+
**大表单超线形态**(`createForm` 输出**超过 20,000 字符**时才有):此时 stdout **只回一句话**——「当前表单内容较大,已临时写入文件 `resultFile路径`,请直接读取 `resultFile路径` 获取完整结果」。**`fields`、`historyRequestData`、`systemFields`、`contextId` 一个都不在 stdout 里**,它们全都在那个文件里(未裁剪的完整 pretty JSON,与 stdout 同口径):`fields` / `historyRequestData` / `systemFields` / `contextId` / `continuation` 一样不少。所以:**先按 `resultFile` 把该文件一次读完**(整份读,不要只给个小的 `limit` 再分段;宿主若报单次读取超限,按报错提示调整),拿到字段清单与 `contextId` 之后再拼 `data`、走 `createRequest`。**不要重跑 `createForm`、不要分段读、不要用 `head`/`tail` 截断、也不要用脚本去挖文件。**
|
|
256
231
|
- 结果里 `persistedResult: true` 表示走了落盘档;`outputChars` 是本次输出那份最终文本的字符数。
|
|
257
232
|
- **输出被宿主截断时**(只看到一小段预览、出现「已截断…字符」字样):**不要去读宿主的工具结果目录**(`~/.workbuddy/projects/**/tool-results/**`:没有读权限,去了必白跑一轮),按同一份输出里的 `resultFile` 取完整结果。
|
|
258
233
|
|
|
@@ -284,7 +259,7 @@
|
|
|
284
259
|
|
|
285
260
|
## 历史流程数据参考规则
|
|
286
261
|
|
|
287
|
-
本节**只适用于 `createForm` 之后组装首次 `data`
|
|
262
|
+
本节**只适用于 `createForm` 之后组装首次 `data` 那一步**——`createRequest` 返回 `missingFields`(必填缺失)后**一律不看历史值、直接问用户**(见「createRequest 返回后的处置」)。历史流程数据有两个来源:命令随 `createForm` 给的 `historyRequestData`,以及你自己按它的范围说明核对过的同类历史流程。**历史流程里的字段值只能按下面六条使用**——六条之外一律不推算、不拼接、不凭印象补值:
|
|
288
263
|
|
|
289
264
|
1. **取值一致、且能推断与本次业务同类 → 可直接采用**:某个字段在**命中的历史流程里取值完全一致**(**一条也算**),并且对照这些历史流程的**其他字段值**,能推断它们和本次要填写的表单属于同一类业务时,直接把这个值填进 `data`,不必再问用户;**取值不一致**时,才需要**三条及以上**取值相同(同样要满足"能推断与本次同类业务"),否则按规则 2 处理或问用户。
|
|
290
265
|
2. **看得出规律 → 按规律生成新值**:历史取值呈现可推断的规律(如编号递增、日期递推、金额分档)时,按该规律生成本次的新值;**规律推不出来就不要用**,照常问用户。
|
|
@@ -298,9 +273,9 @@
|
|
|
298
273
|
- 不传凭据:业务输入禁止出现 Cookie/ETEAMSID/Token/`header.operator`(CLI 托管)。
|
|
299
274
|
- **`data` 的键只能取 `fields` 里的字段 id**(那就是可写字段的全集)。**唯一例外:`missingFields` 点名的字段**——`missingFields` 是**按你本次实际填的值、结合显示属性(联动)规则实时算出来的"最新缺失必填项"**,而 `fields` 是 `createForm` 那一刻的**静态快照**:那时联动还没跑,联动命中后才变成必填的字段当时可能既不在 `fields` 里(若原被联动隐藏)、也不在你的视野里。所以补值**一律以 `missingFields` 为准**,不要因为"它不在 `fields` 里"就把用户给的这条值丢掉。`readOnly` / `disableEdit` / 不可见字段**一个都不要传**——传了整单会被拒(`notEditable`),得把只读字段全部摘掉重跑一轮。**看到 `notEditable` 不要重试、不要换字段 id 绕过**,移除这些字段后重跑。
|
|
300
275
|
- 大表单超线时(stdout 只有一句话、没有 `fields`),**先按 `resultFile` 把那个文件一次读完**再拼 `data`(见「返回」的大表单超线形态);未超线时 `fields` 就在 stdout 里,不必读文件。
|
|
301
|
-
-
|
|
276
|
+
- 附件/文件:附件字段需上传本地文件时,口径见「附件 / 发票字段怎么填」——先提醒用户"上传的附件会先经过公网大模型,请谨慎操作",用户确认后用 **`weaver-e10-caizhilian` 技能**(`caizhilian.file-upload.*`)上传取 `file_id`。**不要另走独立的文件上传技能**(那套双登录模式不属于本 CLI 上传接口)。
|
|
302
277
|
- 附件上传限制:上传前核对该字段的上传限制,不满足先告知用户、不执行上传。看该字段的 `fileUploadParams` 三项——`sizeLimit`(MB)、`formatLimit`(`mode` + `formats`;`formats` 为 `*.*` / `*` 表示不限制后缀)、`maxNum`(数量上限),在 `fields` 里该字段那一条上。
|
|
303
|
-
- 发票字段(componentKey `EinvoiceComponent
|
|
278
|
+
- 发票字段(componentKey `EinvoiceComponent`):口径见「附件 / 发票字段怎么填」,支持两种赋值方式:① 从票夹选取:使用 `weaver-e10-yepiaotong` 技能查询票夹里已有的发票对象(拿 `fid` 后 `invoice.browse-field.data` 取对象);② 使用 `weaver-e10-yepiaotong` 技能上传本地发票文件(`invoice.upload`)并取上传后的发票对象。方式 ② 在真正上传前必须先提醒用户"上传的发票文件会先经过公网大模型,请谨慎操作",用户明确确认后才执行;方式 ① 无需这句提醒。用户未明确发票字段如何赋值时,先反问用户,不需要提前检测 `weaver-e10-yepiaotong` 技能是否可用,真正需要使用上述两种方式给发票赋值时,workbuddy环境下可直接到技能市场搜索【泛微E10业票通发票管理】并自动安装,搜索不到时反馈给用户,其余环境遇到技能缺失时直接反馈给用户。
|
|
304
279
|
- 发票类字段的历史值不可照抄。
|
|
305
280
|
- 发票值拿不到时直接问用户。
|
|
306
281
|
- **日期 / 时间字段按用户说的填即可,不要管格式**:CLI 会按字段自带格式自动归一化(`2026-8-21` / `2026年8月21日 9:5` 都会规整成字段要求的写法;日期+时间控件只给到日期时补 `00:00`)。**不要为格式反复权衡,也不要手工补时间**。
|
|
@@ -340,21 +315,21 @@
|
|
|
340
315
|
|
|
341
316
|
## 示例
|
|
342
317
|
|
|
343
|
-
### ① 解析工作流并载入表单(拿到 fields /
|
|
318
|
+
### ① 解析工作流并载入表单(拿到 fields / historyRequestData / systemFields / continuation)
|
|
344
319
|
|
|
345
320
|
Windows PowerShell:
|
|
346
321
|
|
|
347
322
|
```powershell
|
|
348
|
-
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["<工作流名称>"]
|
|
323
|
+
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["<工作流名称>"]}'
|
|
349
324
|
```
|
|
350
325
|
|
|
351
326
|
macOS/Linux(bash/zsh):
|
|
352
327
|
|
|
353
328
|
```bash
|
|
354
|
-
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["<工作流名称>"]
|
|
329
|
+
weaver-work-cli --json workflow run workflow.createForm --input-json '{"workflow":["<工作流名称>"]}'
|
|
355
330
|
```
|
|
356
331
|
|
|
357
|
-
|
|
332
|
+
返回里是字段清单 + 历史参考值 + 系统字段;字段值按「填值纪律」自己拼成 `data` 再交给 `createRequest`。
|
|
358
333
|
|
|
359
334
|
### ② 填好字段后一次完成发起(action 必填)
|
|
360
335
|
|