weaver-work-cli 0.1.32 → 0.1.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/chunks/{archive-UMGX72K6.js → archive-XBVH7JU7.js} +2 -2
- package/dist/chunks/{archive-oa-N2IYBLF3.js → archive-oa-MZM3EKFQ.js} +2 -2
- package/dist/chunks/{asset-GLEGKFG5.js → asset-4XO7UOUW.js} +2 -2
- package/dist/chunks/{attachment-content-AQNX5N3S.js → attachment-content-VXSWANAC.js} +3 -2
- package/dist/chunks/{blog-E44OTVDA.js → blog-PGZKOPSC.js} +2 -2
- package/dist/chunks/{caizhilian-DQUFZXZL.js → caizhilian-BH4ZVGUN.js} +2 -2
- package/dist/chunks/{calendar-JKPIRKFD.js → calendar-MXEMTIO4.js} +2 -2
- package/dist/chunks/{chunk-QWY6PGL6.js → chunk-2LV74IWP.js} +361 -56
- package/dist/chunks/chunk-3SO6QL6U.js +73 -0
- package/dist/chunks/chunk-5DQEEGCC.js +229 -0
- package/dist/chunks/{chunk-G3QJULO2.js → chunk-6LLJFKJE.js} +1 -1
- package/dist/chunks/{chunk-C6R3B2ML.js → chunk-BPE37FPB.js} +35 -7
- package/dist/chunks/chunk-BYATLLEF.js +68 -0
- package/dist/chunks/chunk-BYBSCN4X.js +932 -0
- package/dist/chunks/{chunk-CVZ2JOSW.js → chunk-F746NKNF.js} +1 -1
- package/dist/chunks/{chunk-GCG2NMWR.js → chunk-HXJQI5NM.js} +4 -2
- package/dist/chunks/{chunk-YRVDW4WN.js → chunk-I6QGIBDM.js} +2 -2
- package/dist/chunks/{chunk-H7J4DC5R.js → chunk-JCSN3JGM.js} +2 -2
- package/dist/chunks/{chunk-2GA5ZIQL.js → chunk-JNG42JKG.js} +30 -1
- package/dist/chunks/{chunk-DW6AUUKS.js → chunk-JUXVYKII.js} +9 -4
- package/dist/chunks/{chunk-6RKD4DRZ.js → chunk-JYKABYCV.js} +2 -2
- package/dist/chunks/{chunk-6EFWDL7Y.js → chunk-NCOVUAZK.js} +2 -2
- package/dist/chunks/{chunk-E4Z23GHM.js → chunk-QHFANTX7.js} +1114 -904
- package/dist/chunks/{ebuilder-form-V5FG2EHC.js → chunk-QYGO5EE2.js} +22 -1148
- package/dist/chunks/{chunk-IURUFGZK.js → chunk-T72N74ZT.js} +50 -33
- package/dist/chunks/{chunk-H6XSTSLM.js → chunk-TC6MZAO3.js} +137 -204
- package/dist/chunks/{chunk-WKI2FBIQ.js → chunk-VPUTVEMC.js} +737 -341
- package/dist/chunks/{chunk-WSKBSQ2U.js → chunk-VPXOPQJI.js} +2 -2
- package/dist/chunks/chunk-WXFPWCXG.js +774 -0
- package/dist/chunks/{chunk-4YC43QQ4.js → chunk-XMGSYD6S.js} +4 -4
- package/dist/chunks/conflict-JAB2LJEZ.js +21 -0
- package/dist/chunks/continuation-RN6PZN2M.js +11 -0
- package/dist/chunks/contract-XI2EEIZU.js +9110 -0
- package/dist/chunks/cowork-SCPGLBA4.js +2527 -0
- package/dist/chunks/ebuilder-form-EYLHNOTA.js +121 -0
- package/dist/chunks/{ehr-HMFY6VIL.js → ehr-EAP77IMT.js} +1344 -27
- package/dist/chunks/{esb-ZYSVB7SG.js → esb-2TGGXEE7.js} +4 -4
- package/dist/chunks/{fna-B7RKPAZD.js → fna-2X7ZE7BU.js} +13 -8
- package/dist/chunks/{host-OCH2BCCV.js → host-C6EL2RKL.js} +3 -3
- package/dist/chunks/{host-45WED2KK.js → host-I4NRK4MX.js} +3 -3
- package/dist/chunks/{host-I4Z6BFYX.js → host-Q4LZGCRU.js} +3 -3
- package/dist/chunks/host-UEI5FGDM.js +23 -0
- package/dist/chunks/{host-KNZ52LJZ.js → host-XCLDDXKQ.js} +3 -3
- package/dist/chunks/{hrm-2KAZGUHI.js → hrm-YXERJM76.js} +3 -3
- package/dist/chunks/{im-ACJJWH4U.js → im-A4VZN2TQ.js} +88 -12
- package/dist/chunks/{invoice-ZK3WCX2U.js → invoice-2Z6YPMIS.js} +3 -3
- package/dist/chunks/{jiuchuanhui-5PQD3IL2.js → jiuchuanhui-AR5GMKZB.js} +2 -2
- package/dist/chunks/{lazy-dispatch-JQXBW3GM.js → lazy-dispatch-QXW7P4X3.js} +4 -4
- package/dist/chunks/{mail-S2HDDXO2.js → mail-7GZ6CPBJ.js} +45 -24
- package/dist/chunks/{meeting-QVN3I37L.js → meeting-3NMGA3MB.js} +278 -43
- package/dist/chunks/{okr-QNG4VC2Q.js → okr-BZ6XUOAG.js} +2 -2
- package/dist/chunks/operations-5QL3AECO.js +11 -0
- package/dist/chunks/{plan-A25EMW6U.js → plan-DR5CMUYP.js} +2 -2
- package/dist/chunks/{project-G6XV66DZ.js → project-6J63MK33.js} +2 -2
- package/dist/chunks/{registry-DC6KR3NH.js → registry-KDD7DHNK.js} +4 -4
- package/dist/chunks/{registry-2VLUAESA.js → registry-OZSMDVPP.js} +2 -2
- package/dist/chunks/{registry-7C5UMIPL.js → registry-TKX2E7C7.js} +2 -2
- package/dist/chunks/{registry-TI3CIUXF.js → registry-VRTNC6UR.js} +8 -6
- package/dist/chunks/{room-recommend-WRTHO6Y2.js → room-recommend-XCWRMB5P.js} +4 -3
- package/dist/chunks/{schedule-KFIITGSK.js → schedule-IVBICP32.js} +4 -3
- package/dist/chunks/{workflow-DJ7SYWAF.js → workflow-D74NFK3C.js} +179 -6
- package/dist/index.js +35 -25
- package/dist/internal/e10/auth-recovery.js +14 -4
- package/dist/internal/e10/fetch-timing.js +31 -0
- package/dist/internal/e10/request-runtime.js +5 -0
- package/dist/shortcuts/contract/host.js +34 -59
- package/dist/shortcuts/cowork/continuation.js +70 -0
- package/dist/shortcuts/cowork/errors.js +59 -0
- package/dist/shortcuts/cowork/host.js +180 -0
- package/dist/shortcuts/cowork/index.js +166 -0
- package/dist/shortcuts/cowork/manifest.js +65 -0
- package/dist/shortcuts/cowork/operations/discuss-write.js +277 -0
- package/dist/shortcuts/cowork/operations/item-write.js +380 -0
- package/dist/shortcuts/cowork/operations/member-write.js +283 -0
- package/dist/shortcuts/cowork/operations/permission-write.js +286 -0
- package/dist/shortcuts/cowork/operations/read.js +423 -0
- package/dist/shortcuts/cowork/operations/registry.js +39 -0
- package/dist/shortcuts/cowork/operations/review-write.js +157 -0
- package/dist/shortcuts/cowork/operations/shared.js +215 -0
- package/dist/shortcuts/cowork/operations/types.js +39 -0
- package/dist/shortcuts/cowork/operations.js +19 -0
- package/dist/shortcuts/ehr/host.js +4 -1
- package/dist/shortcuts/ehr/operations/recruit-candidate-import.js +757 -0
- package/dist/shortcuts/ehr/operations/recruit-position.js +367 -0
- package/dist/shortcuts/ehr/operations/recruit-stats.js +133 -0
- package/dist/shortcuts/ehr/operations/recruit-write.js +43 -16
- package/dist/shortcuts/ehr/operations/recruit.js +182 -10
- package/dist/shortcuts/ehr/operations/registry.js +6 -0
- package/dist/shortcuts/fna/operations/expense-chart.js +19 -7
- package/dist/shortcuts/im/diagnostics.js +97 -0
- package/dist/shortcuts/im/host.js +58 -31
- package/dist/shortcuts/im/index.js +7 -2
- package/dist/shortcuts/im/operations/at-mention.js +127 -0
- package/dist/shortcuts/im/operations/file-user.js +10 -2
- package/dist/shortcuts/im/operations/group-read.js +26 -5
- package/dist/shortcuts/im/operations/group-write.js +35 -28
- package/dist/shortcuts/im/operations/msg-sync.js +7 -2
- package/dist/shortcuts/im/operations/msg-write.js +76 -10
- package/dist/shortcuts/im/operations/quote-mention.js +119 -0
- package/dist/shortcuts/im/operations/session.js +1 -1
- package/dist/shortcuts/im/operations/shared.js +10 -0
- package/dist/shortcuts/im/operations/types.js +13 -0
- package/dist/shortcuts/index.js +10 -0
- package/dist/shortcuts/mail/host.js +12 -1
- package/dist/shortcuts/mail/operations/types.js +17 -2
- package/dist/shortcuts/meeting/host.js +27 -34
- package/dist/shortcuts/meeting/index.js +79 -1
- package/dist/shortcuts/meeting/manifest.js +10 -0
- package/dist/shortcuts/meeting/operations/create.js +4 -1
- package/dist/shortcuts/meeting/operations/eb/catalog.js +10 -0
- package/dist/shortcuts/meeting/operations/eb/conflict.js +84 -8
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +1195 -140
- package/dist/shortcuts/meeting/operations/eb/factory.js +170 -8
- package/dist/shortcuts/meeting/operations/eb/index.js +16 -3
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +50 -5
- package/dist/shortcuts/meeting/operations/eb-fallback.js +163 -0
- package/dist/shortcuts/meeting/operations/env.js +99 -46
- package/dist/shortcuts/meeting/operations/form-fields.js +110 -0
- package/dist/shortcuts/meeting/operations/invitation.js +79 -20
- package/dist/shortcuts/meeting/operations/registry.js +2 -0
- package/dist/shortcuts/meeting/operations/standard-guard.js +71 -0
- package/dist/shortcuts/meeting/operations.js +16 -0
- package/dist/shortcuts/workflow/endpoints.js +8 -3
- package/dist/shortcuts/workflow/index.js +110 -1
- package/dist/shortcuts/workflow/operations/form.js +204 -36
- package/dist/shortcuts/workflow/operations/read.js +104 -23
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupRules.js +448 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupStore.js +106 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/businessRules.js +47 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +30 -23
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.core.js +1 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.group.js +1 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +2 -1
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +2 -4
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +138 -181
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +12 -7
- package/dist/shortcuts/workflow/operations.js +23 -1
- package/docs/e10-auth.md +1 -1
- package/docs/ehr.md +1 -1
- package/docs/fna.md +2 -1
- package/docs/im.md +8 -1
- package/docs/todo-smart-convert/README.md +1 -1
- package/docs/todo-smart-convert/data-contract.md +2 -2
- package/docs/todo-smart-convert/subgroup-rules.md +6 -0
- package/package.json +1 -1
- package/skill-template/business-info.json +18 -0
- package/skill-template/domains/cowork.md +14 -0
- package/skill-template/domains/yimiaoban.md +3 -3
- package/skill-template/skill-template.md +1 -1
- package/skills/weaver-e10-blog/SKILL.md +5 -5
- package/skills/weaver-e10-caizhilian/SKILL.md +5 -5
- package/skills/weaver-e10-calendar/SKILL.md +5 -5
- package/skills/weaver-e10-cowork/SKILL.md +101 -0
- package/skills/weaver-e10-cowork/references/cowork-read.md +90 -0
- package/skills/weaver-e10-cowork/references/cowork-write.md +131 -0
- package/skills/weaver-e10-cowork/references/safety-boundaries.md +45 -0
- package/skills/weaver-e10-esb/SKILL.md +5 -5
- package/skills/weaver-e10-hrm/SKILL.md +5 -5
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -2
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -5
- package/skills/weaver-e10-jucailin/SKILL.md +38 -14
- package/skills/weaver-e10-jucailin/references/recruit-create.md +104 -0
- package/skills/weaver-e10-jucailin/references/recruit-read.md +25 -0
- package/skills/weaver-e10-jucailin/references/recruit-write.md +13 -0
- package/skills/weaver-e10-jucailin/references/salary.md +15 -11
- package/skills/weaver-e10-mail/SKILL.md +17 -14
- package/skills/weaver-e10-meeting/SKILL.md +442 -46
- package/skills/weaver-e10-meeting/references/meeting-eb.md +135 -3
- package/skills/weaver-e10-meeting/references/meeting-invitation.md +28 -2
- package/skills/weaver-e10-meeting/references/meeting-queries.md +9 -6
- package/skills/weaver-e10-meeting/references/meeting-verification.md +8 -6
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-okr/SKILL.md +5 -5
- package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
- package/skills/weaver-e10-plan/SKILL.md +5 -5
- package/skills/weaver-e10-qiyecheng/SKILL.md +5 -2
- package/skills/weaver-e10-qiyecheng/references/catalog.md +2 -2
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +15 -1
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +22 -21
- package/skills/weaver-e10-shared/SKILL.md +12 -12
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +4 -4
- package/skills/weaver-e10-wenshuding/SKILL.md +5 -5
- package/skills/weaver-e10-workflow/SKILL.md +29 -5
- package/skills/weaver-e10-workflow/aigroup/default.json +88 -0
- package/skills/weaver-e10-workflow/references/todo-smart-convert.md +66 -14
- package/skills/weaver-e10-workflow/references/workflow-agent-entry.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-memory.md +1 -1
- package/skills/weaver-e10-workflow/references/workflow-query.md +12 -10
- package/skills/weaver-e10-workflow/references/workflow-view.md +2 -2
- package/skills/weaver-e10-workflow/tools/todo-serve.cjs +239 -0
- package/skills/weaver-e10-workflow/{scripts → tools}/todo-summary.cjs +218 -28
- package/skills/weaver-e10-yepiaotong/SKILL.md +10 -8
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +7 -7
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +10 -10
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +40 -37
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -4
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +27 -38
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +4 -4
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +37 -29
- package/skills/weaver-e10-yimiaoban/SKILL.md +156 -33
- package/skills/weaver-e10-yimiaoban/references/ding-write.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/error-codes.md +5 -1
- package/skills/weaver-e10-yimiaoban/references/group-read.md +5 -1
- package/skills/weaver-e10-yimiaoban/references/group-write.md +6 -4
- package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -0
- package/skills/weaver-e10-yimiaoban/references/msg-write.md +34 -2
- package/skills/weaver-e10-yimiaoban/references/safety-boundaries.md +5 -2
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +79 -58
- package/skills/weaver-e10-yimiaoban/references/user-remind.md +2 -2
- package/skills/weaver-e10-ziguanjia/SKILL.md +5 -5
|
@@ -53,7 +53,7 @@ XiaoE 环境有两种识别入口:桌面客户端由 Agent 根据宿主或任
|
|
|
53
53
|
- 工作目录名含 `xiaoeUserData`、使用 XiaoE 内置 Node.js,或已安装相关 CLI;
|
|
54
54
|
- 过去在同一台机器上登录或安装过 XiaoE。
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
桌面客户端首次没有本地会话时,Agent 判定为 XiaoE 后显式执行 `weaver-work-cli auth xiaoe`;后续业务命令只有需要 XiaoE 专属业务行为时才在 `weaver-work-cli` 之后加 `--runtime-agent xiaoe`,例如 `weaver-work-cli --runtime-agent xiaoe workflow ...`。已保存的 XiaoE 会话过期恢复不依赖这个参数,也不依赖 Skill 或 Agent:CLI 会根据会话内的 `agentType` / `loginSource` 在公共请求层自行处理。`--runtime-agent` 不携带、不选择凭据。
|
|
57
57
|
|
|
58
58
|
WorkBuddy、Codex 及其他智能体一律使用 `weaver-work-cli auth login --base-url "<用户确认的登录域名>" --agent_type "<当前智能体名称>"` 走浏览器 OAuth。`auth login` / `auth oidc` 不会读取或消费 XiaoE 凭据。
|
|
59
59
|
|
|
@@ -67,9 +67,9 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
67
67
|
|
|
68
68
|
下述 `auth xiaoe` 流程仅适用于上述已确认的 XiaoE 智能体环境;其他智能体不执行宿主脚本检测,直接进入浏览器 OAuth 流程。`auth xiaoe` 命令本身就是认证方式的显式选择;`hasXiaoEEnv` 使用桌面的 `--runtime-agent xiaoe` 或任意 `XIAOE_*` 环境变量识别运行环境。
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
首次缺少本地会话时只运行 `weaver-work-cli auth xiaoe`。CLI 内部按「平台凭证 Node 换票 → CLI 自带 `xiaoe_env.py` 兼容换票 → 宿主 `tokens.py` → 桌面 XiaoE 客户端会话 → `WEAVER_XIAOE_*` 环境映射」顺序取凭据;其中 `XIAOE_DOMAIN` 是 XiaoE/erpa 换票服务地址,不是 E10 地址。`xiaoe_env.py` 属于 CLI npm 包,不放入 shared Skill,且只能由 CLI 内部执行和解析。已有 XiaoE 会话被接口明确拒绝为失效时,CLI 根据会话元数据在公共请求层静默恢复并重放一次;这个流程绕开 shared Skill,Agent 不参与,也不得再补跑登录或原业务命令。失败时 CLI 返回最终结构化错误。
|
|
71
71
|
|
|
72
|
-
1.
|
|
72
|
+
1. 首次无本地登录态、准备执行业务命令前需要建立 E10 会话,或 `auth status --no-check` 显示未登录时,运行:
|
|
73
73
|
```text
|
|
74
74
|
weaver-work-cli auth xiaoe
|
|
75
75
|
```
|
|
@@ -77,18 +77,18 @@ Token、Cookie、ETEAMSID 和业务凭证**只能由 `weaver-work-cli` 内部读
|
|
|
77
77
|
3. XiaoE 统一登录由 CLI 按序取凭证:① 平台注入的 `XIAOE_USER_TOKEN` + `XIAOE_DOMAIN`,先走 Node 换票,再由 CLI npm 包自带的标准库 `xiaoe_env.py` 作兼容回退;② 宿主 `xiaoeUserData/tokens.py`(仅桌面宿主,CLI 在 macOS/Windows 都会先自动发现 XiaoE 客户端内置 Python,再回退到系统 Python);③ 内置原生实现读取桌面 XiaoE 客户端会话换取 `eteamId`,依次查找 `XIAOE_USER_SETTINGS_PATH`、`XIAOE_ROBOT_DATA_ROOT` / `XIAOE_ROBOT_ROOT` 和默认 `XiaoE/Robots/<id>/user_settings.json`,因此会话有效时不要求存在 `tokens.py`;④ `WEAVER_XIAOE_*` 环境映射。宿主只注入 `XIAOE_DOMAIN`、`XIAOE_USER_TOKEN` 等平台变量,不会注入 ETEAMSID 环境变量,CLI 也不读取 `XIAOE_ETEAMSID`。Agent 不要打印、转述、索取或要求用户手动设置这些凭证,也不要直接执行任一脚本或因为脚本报缺依赖就让用户安装 Python 包——凭据链内部的兼容回退由 CLI 完成。
|
|
78
78
|
4. `auth xiaoe` 是 XiaoE 认证方式的显式入口:CLI 不再判断当前宿主,只检查并消费可用凭据源。E10 目标地址按「显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile → CLI 内置默认值」解析,绝不能把 `XIAOE_DOMAIN` 当作 E10 地址。Token、Cookie、ETEAMSID 仍属于凭证,禁止在回复中展示。
|
|
79
79
|
5. XiaoE 统一登录走不通时,无论 macOS、Windows、Linux 或 Web,CLI 都返回 `authentication/xiaoe_credential_unavailable`,绝不自动打开浏览器或降级到 `auth login`;本任务必须停止,不得另行调用其他登录 Skill 或登录命令。
|
|
80
|
-
6. `auth status --no-check` 不会触发 XiaoE
|
|
80
|
+
6. `auth status --no-check` 不会触发 XiaoE 统一登录;业务命令加载到 `agentType=XiaoE` 或 `loginSource=xiaoe-unified` 的会话并被 E10 明确拒绝为失效时,即使没有 `XIAOE_*` 或 `--runtime-agent xiaoe`,也会静默触发一次统一登录并重放该请求一次。首次无本地会话仍须显式执行 `auth xiaoe`;具体读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
81
81
|
|
|
82
82
|
### 认证错误只报告状态,不指定登录命令
|
|
83
83
|
|
|
84
84
|
CLI 和业务 Skill 在返回 `authentication` / `session_expired` 时,只能说明未登录或会话已失效,不得在 `error.message` 或业务错误分支中写死 `auth login`、`auth xiaoe`、`--base-url`、`--agent_type` 等具体登录命令或参数。
|
|
85
85
|
|
|
86
|
-
业务 Skill
|
|
86
|
+
业务 Skill 的提示词必须区分“CLI 已处理的过期恢复”和“首次认证缺失”,不能让 Agent 接管底层自动恢复:
|
|
87
87
|
|
|
88
|
-
1. Agent
|
|
89
|
-
2.
|
|
90
|
-
3.
|
|
91
|
-
4.
|
|
88
|
+
1. 已有 XiaoE 会话出现 `session_expired` 时,CLI 已在公共请求层自动取凭据、校验同一环境/用户并重放一次;若该错误最终仍返回,Agent 只反馈错误并停止,不执行 `auth xiaoe`、其他登录 Skill 或原业务命令。
|
|
89
|
+
2. 仅首次无会话或明确的 `auth not found` 才由 Agent 重用任务开始时的宿主判定;明确为 XiaoE 时执行一次 `weaver-work-cli auth xiaoe`,不得改用 `auth login`。返回 `authentication/xiaoe_credential_unavailable` 时停止并反馈宿主凭据不可用。
|
|
90
|
+
3. 首次认证缺失且非 XiaoE 时,不得执行 `auth xiaoe`;取得用户确认的真实 E10 登录域名后,执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。已有可用 profile 时也可按用户选择切换并验证。
|
|
91
|
+
4. 显式登录后读操作可以重新执行;写操作不得复用旧 continuation,必须重新 prepare 并重新确认。已返回 `partial` / `write_uncertain` 时先只读回查,禁止直接重放写入。
|
|
92
92
|
|
|
93
93
|
`auth xiaoe` 的 preflight 会输出不含凭证的 `authMode=xiaoe`、`credentialSourceDetected`、`attempted`、`platformCredentialDetected`、`tokenScriptDetected`、`clientSettingsDetected`、`environmentCredentialDetected` 和 `baseUrl`;命中脚本分支时会出现 `Trying XiaoE token script credential...`,命中内置 Node 会话分支时会出现 `Trying built-in XiaoE client session credential...`。成功后登录结果和 `auth status` 中的 `credentialSourceStep`、`credentialSourceType`、`credentialSourceLabel` 用于确认实际来源;`2 / token_script / xiaoeUserData/tokens.py` 表示宿主脚本换票成功,`3 / xiaoe_client / XiaoE client settings` 表示不依赖 `tokens.py`、由 Node 直接换票成功。
|
|
94
94
|
|
|
@@ -181,7 +181,7 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
181
181
|
| 强触发条件 | Reference |
|
|
182
182
|
| --- | --- |
|
|
183
183
|
| 命令不可用、Agent 自动安装 CLI、安装、构建、全局 link、检查可用 skill | [`weaver-e10-installation.md`](references/weaver-e10-installation.md) |
|
|
184
|
-
| 登录、profile、E10 会话、baseUrl、auth 文件、`WEAVER_*` / `XIAOE_*`
|
|
184
|
+
| 登录、profile、E10 会话、baseUrl、auth 文件、`WEAVER_*` / `XIAOE_*` 环境变量;**首次未登录需选择认证方式,XiaoE 会话过期由 CLI 底层恢复** | [`e10-auth-and-session.md`](references/e10-auth-and-session.md) |
|
|
185
185
|
| 容器/沙箱/CI/无 GUI 环境、无人值守、登录类命令超过 180 秒未结束、出现 `Open browser login` / `Waiting for E10 authorization callback` / `Could not open browser automatically`、`auth xiaoe` 返回凭据不可用、认证目录 `EACCES` | [`non-interactive-environment.md`](references/non-interactive-environment.md) |
|
|
186
186
|
| 判断 stdout/stderr、JSON envelope、退出码、脚本封装、自动化调用、大结果渲染/分页控量 | [`json-output-contract.md`](references/json-output-contract.md) |
|
|
187
187
|
| 准备执行写入/删除/导入/更新、遇到 `confirmation.required`、`partial.write_uncertain`、网络中断或回查失败 | [`high-risk-write.md`](references/high-risk-write.md) |
|
|
@@ -198,8 +198,8 @@ User-Agent: AgentType=<agentType>,IsAgent=true
|
|
|
198
198
|
|
|
199
199
|
5. 不能猜测 CLI 未暴露的内部字段、接口路径、ID 解析逻辑或回查语义。
|
|
200
200
|
|
|
201
|
-
6.
|
|
201
|
+
6. 已有 XiaoE 会话的 `session_expired` 由 CLI 底层自动处理,Agent 不运行任何登录命令或重试业务命令;最终仍返回该错误时只反馈并停止。首次未登录或 `auth status` 未登录时,Agent 若已判定为 XiaoE,可运行一次 `weaver-work-cli auth xiaoe`;统一登录不可用时反馈 CLI 原因并停止。任意系统都不得把 `xiaoe_credential_unavailable` 改成浏览器 OAuth、本地终端操作或其他登录 Skill。仅首次认证缺失且非 XiaoE 环境在用户确认真实 E10 域名后运行 `auth login`,并传入 `--agent_type "<当前智能体名称>"`。具体流程读取 [`e10-auth-and-session.md`](references/e10-auth-and-session.md)。
|
|
202
202
|
|
|
203
203
|
7. 附件、图片上传或文件解析属于敏感数据处理。即便 operation 风险等级不是高风险写入,也必须先取得用户对“文件内容可能进入大模型/外部解析服务”的明确确认;不能把用户仅提供文件路径或文件名视为同意解析或上传。
|
|
204
204
|
|
|
205
|
-
8. Agent 明确选择 `auth xiaoe` 后,CLI 按顺序从平台注入凭证(Node 换票后由 CLI npm 包自带 `xiaoe_env.py` 兼容回退)、宿主 `xiaoeUserData/tokens.py`、内置原生实现读取的桌面 XiaoE 客户端会话(宿主注入路径优先、默认 `XiaoE/Robots/<id>/user_settings.json` 回退)、`WEAVER_XIAOE_*`
|
|
205
|
+
8. Agent 明确选择 `auth xiaoe` 后,CLI 按顺序从平台注入凭证(Node 换票后由 CLI npm 包自带 `xiaoe_env.py` 兼容回退)、宿主 `xiaoeUserData/tokens.py`、内置原生实现读取的桌面 XiaoE 客户端会话(宿主注入路径优先、默认 `XiaoE/Robots/<id>/user_settings.json` 回退)、`WEAVER_XIAOE_*` 环境映射读取支持统一登录的凭证。业务命令不会在首次无会话时自动登录,但已有会话被接口明确拒绝时会根据持久化会话的 `agentType` / `loginSource` 静默恢复 1 次,不要求 Agent 添加 `--runtime-agent xiaoe`;该参数仅用于其他 XiaoE 专属业务行为。不要要求用户提供、展示或手动设置这些凭证。任意系统失败时都反馈结构化错误,不自动降级浏览器。
|
|
@@ -20,7 +20,7 @@ weaver-work-cli auth whoami
|
|
|
20
20
|
|
|
21
21
|
登录态判断只允许通过 `weaver-work-cli auth status --no-check`、`weaver-work-cli auth profile list/current`、`weaver-work-cli doctor --e10` 和业务命令返回的 JSON 错误完成。只有用户明确提供外部 auth 文件路径时,才可按用户要求使用 `--auth <path>` 或 `E10_AUTH_PATH`;不能主动搜索旧认证目录。
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## 首次未登录由 Agent 选择认证方式;XiaoE 会话过期由 CLI 底层恢复
|
|
24
24
|
|
|
25
25
|
业务命令依赖 E10 登录态。出现以下任一情况即判定为未登录或登录失效:
|
|
26
26
|
|
|
@@ -29,7 +29,7 @@ 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
|
|
32
|
+
CLI 的认证错误只是状态信号,不是登录命令。已有 XiaoE 会话过期时,公共请求层会根据持久化会话的 `agentType` / `loginSource` 自动恢复,不依赖 `XIAOE_*`、`--runtime-agent xiaoe`、shared Skill 或 Agent。仅首次无会话、`auth not found` 等认证缺失才进入下述显式登录流程。
|
|
33
33
|
|
|
34
34
|
此时**禁止**:
|
|
35
35
|
|
|
@@ -40,12 +40,12 @@ CLI 的认证错误只是状态信号,不是登录命令。`error.message` 和
|
|
|
40
40
|
|
|
41
41
|
**正确流程(按序执行,缺一不可):**
|
|
42
42
|
|
|
43
|
-
0.
|
|
43
|
+
0. **仅首次无本地会话时,由 XiaoE 智能体环境主动选择统一登录**:桌面端宿主/任务上下文明确标识为 XiaoE,或网页端命中原有环境变量判断时,才运行:
|
|
44
44
|
```text
|
|
45
45
|
weaver-work-cli auth xiaoe
|
|
46
46
|
```
|
|
47
47
|
本机存在 `xiaoeUserData/tokens.py`、XiaoE 客户端目录、工作目录或历史登录,都不能作为宿主身份依据。桌面客户端可由 `--runtime-agent xiaoe` 标识;命令进程中存在任意 `XIAOE_*` 变量时也直接标识为 XiaoE。未命中这两类判断的 WorkBuddy、Codex 及其他智能体必须跳过此步,进入下方浏览器 OAuth 流程。
|
|
48
|
-
CLI 会按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile `config.baseUrl` → CLI 内置默认值”解析 E10 登录域名;`XIAOE_DOMAIN` 只作为 XiaoE/erpa
|
|
48
|
+
CLI 会按“显式 `--base-url` → 专用 `WEAVER_XIAOE_*` E10 配置/映射 → 当前 profile `config.baseUrl` → CLI 内置默认值”解析 E10 登录域名;`XIAOE_DOMAIN` 只作为 XiaoE/erpa 换票服务地址。业务命令不会在缺少本地会话时主动登录;已有会话被接口明确拒绝为失效时,公共请求层根据会话内 `agentType=XiaoE` 或 `loginSource=xiaoe-unified` 静默恢复并重放一次,不要求 Agent 添加 `--runtime-agent xiaoe`。恢复失败或重放后仍失效时,Agent 只反馈最终错误并停止,不再运行登录或业务命令。
|
|
49
49
|
|
|
50
50
|
1. **仅非 XiaoE 环境进入本步**。禁止先执行 `auth xiaoe` 或调用其他登录 Skill。先调用宿主提供的提问 / 弹框能力询问用户,让用户二选一:
|
|
51
51
|
- 输入本次要登录的 E10 登录域名(base URL),形如 `https://<企业域名>`;或
|
|
@@ -114,11 +114,11 @@ Agent 不得自行拼接、改写或向用户索取上述凭证(禁止要求
|
|
|
114
114
|
- 写请求已经发出后,遇到结果不确定必须停止;不要把 `.apply` 当成可重试读操作
|
|
115
115
|
- 下载是异步任务,`.apply` 会持续轮询进度;不要因为等待时间长就中断重放
|
|
116
116
|
- **错误为 `authentication` 或 `session_expired` 时:立即停止当前操作,不要用示例占位域名或自行猜域名登录,也不要盲目重试**。先读取共享规则 `../weaver-e10-shared/references/e10-auth-and-session.md`。
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
- 已有 XiaoE 会话的 `session_expired` 已由 CLI 底层自动换票并重放一次;若错误最终仍返回,Agent 只反馈并停止,不执行任何登录命令、其他登录 Skill 或原业务命令。
|
|
118
|
+
- 仅首次无会话或明确的 `auth not found` 才由 Agent 复用任务开始时的宿主判定。
|
|
119
|
+
- 首次认证明确为 XiaoE 时,执行一次 `weaver-work-cli auth xiaoe`;返回 `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` 时先只读回查,禁止直接重放写入。
|
|
122
122
|
|
|
123
123
|
### 4) 附件、图片和文件解析确认
|
|
124
124
|
|
|
@@ -39,7 +39,7 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
39
39
|
- Read `../weaver-e10-shared/SKILL.md`(若尚未读过);
|
|
40
40
|
- `weaver-work-cli [--is-connector true] --json workflow run workflow.memoryPrompt`——该命令**无入参**;**先按上方 `--is-connector` 判据确定前缀,再直接执行**(仅"非首次对话且距上次成功读取记忆不足 6 小时"时跳过);
|
|
41
41
|
- **查询类意图**只读 [`workflow-query.md`](references/workflow-query.md) 一份(已覆盖 `workflow.search` 与 `workflow.todoStat`,不要再读其他查询文档);**但该文件约 108 KB / 835 行——整读会超单次读取上限被明确拒绝**(Read 单次上限约 **20,000 tokens ≈ 100 KB / 800 行**):**首轮一次读完开头的契约段**(`offset 1 limit 244`,约 30 KB,已覆盖 Operation、全部输入参数含「大分类判定」、时间条件与「待办时间默认语义」、执行流程),其余章节(`planJson` 编排、汇报式分组骨架、渲染规则与示例)**只在需要的那一刻按它开头的「分段索引」给出的行区间补读**;查看/操作/共享/发起/修改等意图读对应那一份 reference 即可,不要顺手把查询文档也一起读;**唯一例外是批量操作**——用 `scopeCondition` 走范围驱动时要构造与 `workflow.search` 同形的查询条件,**这一轮可以同时读 [`workflow-query.md`](references/workflow-query.md) 与 [`workflow-batch.md`](references/workflow-batch.md)**(前者给条件写法,后者给 `scopeCondition`/`action` 的执行口径),其余意图仍只读对应那一份;
|
|
42
|
-
- **泛化待办查询**(如"今天有哪些待办"
|
|
42
|
+
- **泛化待办查询**(如"今天有哪些待办")——**先按下方「待办汇总 vs 待办统计分流」验词**:原话含「汇总待办」/「批量处理待办」/「摘要」→ `workflow.todoSmartConvert`;含「统计待办」→ `workflow.todoStat`;三类词都没有才按本条走:先看上一步 `memoryPrompt` 返回的 `oaContext.smartGrouping`:`false`(低版本)→ **直接** `workflow.search`(category=todo,**不要带 `planJson`/`subCategory`**),CLI 已自带分组统计与卡片,原样渲染即结束;`true`(智能分组)→ 才追加 `workflow.todoStat` 做统计规划,再带 `planJson` 取数。**不要在 `smartGrouping` 为 `true` 之前先调 `workflow.todoStat`**——低版本必然失败(报 `todo_stat_requires_smart_mode`)白费一次调用。
|
|
43
43
|
> 以上调用**互不依赖,必须并行**:串行拆轮会成倍拉长耗时。**实测**:一次泛化待办查询全程约 70s,其中**模型轮次占 ~95%**(每轮约 8~25s,主因是模型输出量),CLI 命令本身合计只有 1~2s。**能省一轮就省一轮**——尤其不要为"解析上一轮输出""取流程 ID"另起一轮。
|
|
44
44
|
- **[`workflow-memory.md`](references/workflow-memory.md) 本步不读**——记忆读取的命令形态见上一行(**含 `--is-connector` 判据**),**记忆保存的规则已在本文件「记忆保存」章节给全**;只有需要判断"放 `user.md` / `memory.md` / `workflow:{id}` 哪一类"或其它字段细节时,才在需要的那一刻去读它。
|
|
45
45
|
- **读被拒就按行段重读源文件,不要去读宿主的落盘文件**:Read 单次超限是**明确报错**(提示改用 `offset`/`limit`),照提示把源文件分行段重读即可;**不要**去读宿主的落盘文件(`~/.workbuddy/projects/**/tool-results/**`:**没有读取权限**,去读必然拿一句 `Permission … has been denied`、白费一轮——那是**命令输出**超线时的落盘预览,不是 Read 的读取路径)。
|
|
@@ -92,7 +92,30 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
92
92
|
|
|
93
93
|
**判定规则:** 用户核心对象是流程实例(request)或流程发起表单时走本 Skill。要发起某个流程用 `workflow.createForm`(它内部解析当前用户**可发起**的工作流,解析不出唯一目标时直接给出候选);查询"我有哪些待办"用 `workflow.search`。涉及"姓名转人员 ID / 组织架构 / 部门岗位"时,人员与组织解析交给 `weaver-e10-hrm`,本 Skill 只在操作流程时消费其返回的人员 ID。
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
**待办「汇总」vs「统计」分流(2026-10-28 用户定稿,只按原话命中,不做额外推理;先判这条,再判上面的常规规则):**
|
|
96
|
+
|
|
97
|
+
- 原话含 **「统计待办」** → `workflow.todoStat`。它**只由这句触发**(仍须 `oaContext.smartGrouping === true`,低版本报 `todo_stat_requires_smart_mode`)。
|
|
98
|
+
- 原话含 **「汇总待办」**、**「批量处理待办」**、**「摘要」** 等归拢说法 → 只读 operation `workflow.todoSmartConvert`,并且**只读** [`todo-smart-convert.md`](references/todo-smart-convert.md)。
|
|
99
|
+
- 两类词**同时出现** → 按 `workflow.todoSmartConvert`(归拢优先;`todoStat` 只服务纯统计诉求)。
|
|
100
|
+
- 三类词**都没有**(只是"有哪些待办 / 列出来 / 多少条")→ `workflow.search`,不要调 `workflow.todoStat`。
|
|
101
|
+
- **例外**:「批量处理待办」后面跟了明确写动作(提交 / 置已读 / 催办 / 共享 / 转发 / 退回)时,仍走 `workflow.batch*`,不要因为出现"批量处理"就转成汇总。
|
|
102
|
+
- **不要**为了"先看一眼有哪些"去调 `workflow.todoStat` / `workflow.search` 再回头走汇总链路——那会多花一轮,且交付形态会被带偏。
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
### 用户意图 → JSON(2026-10-28 新增,模型负责理解、CLI 负责落盘)
|
|
106
|
+
|
|
107
|
+
用户这轮给了**侧重点/阈值口径**(如"300 元以内的报销单独一组""只看今天到期的")时,把意图转成规则条目并写入用户意图文件:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
weaver-work-cli --json workflow aigroup set --input-json '{"workflowName":["费用报销"],"weight":100,"aiGroup":{"groupRule":{"focus":true,"sysArg":false,"aiContext":"流程详情","focusKeyword":[["报销金额","小于等于",300]],"groupTitle":"300元以内"}}}'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
- `workflowName` 用**数组**写别名(用户原话里的叫法都放进去);匹配是"精确别名优先 → 包含命中按 weight 升序 → `*` 兜底"。
|
|
114
|
+
- **意图条目一定要给更小的 `weight`**(默认规则按 100/200/… 排,意图建议 10~90),否则包含命中时会输给默认条目。
|
|
115
|
+
- `focus:true` 必须给 `focusKeyword`(`[指标, 算子, 值]`,`介于` 用四元组);`sysArg:true` 表示指标是列表自带属性(如 `planFinishDatetime`),`false` 表示从流程详情字段取。
|
|
116
|
+
- `focus:false` 必须给 `aiContext`(`流程标题`/`流程详情`),运行时由 AI 分组、**必须**给 `aiGroups`。
|
|
117
|
+
- **不允许**用 `workflowName:["*"]`(兜底规则归 `aigroup/default.json`);同一 `workflowName` 再次写入是**整条覆盖**。
|
|
118
|
+
- 写入后用 `weaver-work-cli --json workflow aigroup show` 复核;`aigroup clear` 清空意图(不动默认规则)。
|
|
96
119
|
|
|
97
120
|
**本分支术语(沟通、改造、写文档一律用这套说法):**
|
|
98
121
|
|
|
@@ -110,8 +133,9 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
110
133
|
|
|
111
134
|
- 不要先调用 `workflow.search`,也不要套用它的分组或 `finalMarkdown` 输出口径。
|
|
112
135
|
- 阶段顺序、`aiGroups`(仅在需要语义侧重点时生成)与回灌、摘要规则和最终输出均以该 reference 为准;若省略 `aiGroups`,按 reference 的确定性规则继续执行;AI 计划必须基于本轮 `collect` 结果。
|
|
136
|
+
- **`groupingBrief[].groupingPrompt` 是规则文件(`default.json`)给的分组口径**(只在 `focus=false` 组出现):生成该组 `aiGroups` 前必须先读它,组名只能取它列出的词表,不得自行新造;它与 `aiContext`(决定看什么素材)是两件不同的事。
|
|
113
137
|
- 本分支只读;提交、置已读、催办、共享、转发、退回等写操作仍走 `workflow.batch*`。
|
|
114
|
-
-
|
|
138
|
+
- 最终交付(**2026-10-28 起**):载荷**默认只在 `params.data.dataSource` 放本地服务地址**(`finish` 自动发布快照,服务是**全局单例、单进程多快照**,进程恒为 1、端口恒定;每份快照各自空闲 30 分钟后淘汰),明细由组件 GET 取;**正文照常内联完整 `<browsertool>` 块**(约 900 B,不算大载荷),同时落一份 `<用户名>_<时间戳>.json`(三键数据)并用 `present_files` 打开(用户名取认证系统 `username`)。只有 `--no-serve` 回退时才内联完整明细数据。排错看 `<tmpdir>/weaver-work-cli-serve/current.json`、`GET /health` 与各输出目录的 `serve.json`。
|
|
115
139
|
|
|
116
140
|
## 选哪个命令
|
|
117
141
|
|
|
@@ -119,12 +143,12 @@ cliHelp: "weaver-work-cli workflow --help"
|
|
|
119
143
|
| --- | --- | --- |
|
|
120
144
|
| 查看可用 operation、字段和风险等级、输出契约 | `workflow schema` | [`workflow-agent-entry.md`](references/workflow-agent-entry.md) |
|
|
121
145
|
| 常规流程列表查询与筛选(含查询分组,不做跨条目汇总) | `workflow run workflow.search` | [`workflow-query.md`](references/workflow-query.md) |
|
|
122
|
-
|
|
|
146
|
+
| 待办整体分组计数(**原话含「统计待办」才走这条**;智能分组第二步,须先确认 `oaContext.smartGrouping === true`) | `workflow run workflow.todoStat` | [`workflow-query.md`](references/workflow-query.md) |
|
|
123
147
|
| 查看流程完整详情、生成摘要、打开流程、查签字意见/流转日志 | `workflow run workflow.detail` / `workflow.summary` / `workflow.open` / `workflow.requestLog` | [`workflow-view.md`](references/workflow-view.md) |
|
|
124
148
|
| 打开 OA 页面(待办/已办/草稿/监控/创建/查看) | `workflow run workflow.pageOpen` | [`workflow-view.md`](references/workflow-view.md) |
|
|
125
149
|
| 单条流程操作:同意/提交/退回/转办/委托/转发/抄送/加审/收回/结束/征询/删除/催办 | `workflow run workflow.operatePrepare` / `workflow.operateApply` | [`workflow-operate.md`](references/workflow-operate.md) |
|
|
126
150
|
| 批量提交 / 置已读 / 催办 / 共享 / 转发 / 退回(均为单命令,一次调用完成) | `workflow run workflow.batchSubmit` / `workflow.batchRead` / `workflow.batchSupervise` / `workflow.batchShare` / `workflow.batchForward` / `workflow.batchReject` | [`workflow-batch.md`](references/workflow-batch.md) |
|
|
127
|
-
|
|
|
151
|
+
| 汇总待办 / 批量处理待办 / 待办摘要 / 待办金额或天数合计(**原话含「汇总待办」「批量处理待办」「摘要」优先走这条**,workflow 内独立分支) | `workflow run workflow.todoSmartConvert` | [`todo-smart-convert.md`](references/todo-smart-convert.md) |
|
|
128
152
|
| 单条流程共享(人/部门/分部/群组/角色/岗位/所有人) | `workflow run workflow.sharePrepare` / `workflow.shareApply` | [`workflow-share.md`](references/workflow-share.md) |
|
|
129
153
|
| 发起/创建流程、填单、存草稿 | `workflow run workflow.createForm` / `workflow.createRequest` | [`workflow-create.md`](references/workflow-create.md) |
|
|
130
154
|
| 修改已存在流程的表单内容 | `workflow run workflow.editLoad` / `workflow.editPrepare` / `workflow.editApply` | [`workflow-edit.md`](references/workflow-edit.md) |
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 3,
|
|
3
|
+
"defaults": {
|
|
4
|
+
"weight": 999,
|
|
5
|
+
"needSummary": true,
|
|
6
|
+
"requestSummaryPrompt": "",
|
|
7
|
+
"summaryMaxChars": 150,
|
|
8
|
+
"groupSummaryMaxChars": 100,
|
|
9
|
+
"groupSummaryTail": "可展开逐条查看或直接汇总处理"
|
|
10
|
+
},
|
|
11
|
+
"rules": [
|
|
12
|
+
{
|
|
13
|
+
"workflowName": ["客户问题支持"],
|
|
14
|
+
"weight": 100,
|
|
15
|
+
"aiGroup": {
|
|
16
|
+
"groupSummary": {
|
|
17
|
+
"needAI": false,
|
|
18
|
+
"template": "含 {{count}} 条已过期或今日到期的问题流程,{{creators}}发起,其余 {{restCount}} 条按单条展示,{{tail}}"
|
|
19
|
+
},
|
|
20
|
+
"groupRule": {
|
|
21
|
+
"focus": true,
|
|
22
|
+
"sysArg": true,
|
|
23
|
+
"aiContext": "流程详情",
|
|
24
|
+
"focusKeyword": [["planFinishDatetime", "小于等于", "今天"]],
|
|
25
|
+
"groupTitle": "已过期及今天即将过期的流程"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"workflowName": ["满意度", "满意调查", "评价调查", "服务评价", "问卷调查"],
|
|
31
|
+
"weight": 200,
|
|
32
|
+
"needSummary": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"workflowName": ["内部留言", "内部消息", "留言板", "意见建议"],
|
|
36
|
+
"weight": 300,
|
|
37
|
+
"aiGroup": {
|
|
38
|
+
"groupSummary": {
|
|
39
|
+
"needAI": true,
|
|
40
|
+
"prompt": "用不超过 {{maxChars}} 字概括本组留言:主题集中在哪些事项、主要由谁发起、有无需要优先处理的。只使用给定上下文,不要编造。"
|
|
41
|
+
},
|
|
42
|
+
"groupRule": {
|
|
43
|
+
"focus": false,
|
|
44
|
+
"aiContext": "流程标题",
|
|
45
|
+
"groupingPrompt": "按留言主题归类,组名只允许这七个:产品更新与发布、案例与方案分享、培训与课程通知、周报与月报、制度与流程提醒、测试与验证数据、其他通知。每条只归一组,不得新造组名;判断不出主题的放「其他通知」。"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"workflowName": ["请假", "休假", "年假", "调休", "病假", "事假", "婚假", "产假", "陪产", "丧假", "探亲假", "工伤假", "哺乳假", "公休"],
|
|
51
|
+
"weight": 400,
|
|
52
|
+
"aiGroup": {
|
|
53
|
+
"groupSummary": {
|
|
54
|
+
"needAI": false,
|
|
55
|
+
"template": "共{{count}}条,涵盖{{categoryCount}}类假别({{categories}}),{{creators}}发起。{{tail}}"
|
|
56
|
+
},
|
|
57
|
+
"groupRule": {
|
|
58
|
+
"focus": true,
|
|
59
|
+
"sysArg": false,
|
|
60
|
+
"aiContext": "流程详情",
|
|
61
|
+
"focusKeyword": [["请假天数", "小于等于", 1]],
|
|
62
|
+
"groupTitle": "1天以内"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"workflowName": ["报销", "费用", "付款", "请款", "借款", "发票", "差旅", "对公", "资金", "核销"],
|
|
68
|
+
"weight": 500,
|
|
69
|
+
"aiGroup": {
|
|
70
|
+
"groupSummary": {
|
|
71
|
+
"needAI": false,
|
|
72
|
+
"template": "单笔 ¥{{min}} ~ ¥{{max}},合计 ¥{{sum}},涵盖{{categoryCount}}类费用({{categories}}),{{creators}}发起。{{tail}}"
|
|
73
|
+
},
|
|
74
|
+
"groupRule": {
|
|
75
|
+
"focus": true,
|
|
76
|
+
"sysArg": false,
|
|
77
|
+
"aiContext": "流程详情",
|
|
78
|
+
"focusKeyword": [["报销金额", "小于等于", 100]],
|
|
79
|
+
"groupTitle": "100元以内"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"workflowName": ["*"],
|
|
85
|
+
"weight": 999
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
`workflow.todoSmartConvert` 是 workflow 模块的只读 operation,用于跨条目取数、首次分组、校验 AI 分组计划、按需取详情和回填单条摘要。固定的组摘要由 CLI 生成,普通列表查询使用 `workflow.search`;批量提交、置已读、催办、共享、转发、退回使用 `workflow.batch*`;不要把这些链路混用。
|
|
4
4
|
|
|
5
|
+
**触发分流(2026-10-28 用户定稿,与 `SKILL.md`「待办『汇总』vs『统计』分流」同口径)**:原话含 **「汇总待办」/「批量处理待办」/「摘要」** 等归拢说法 → 走本 operation;原话含 **「统计待办」** → 走 `workflow.todoStat`(不是本 operation);两类词同时出现按本 operation(归拢优先);三类词都没有("有哪些待办 / 列出来 / 多少条")→ `workflow.search`。**不要**为了"先看一眼有哪些"先去调 `todoStat` / `search` 再回头走本链路——那会多花一轮,且交付形态会被带偏。
|
|
6
|
+
|
|
7
|
+
> **⚠️ 2026-10-28 起:分组规则已外置到 JSON,代码不再按业务类型分支。**
|
|
8
|
+
> 唯一真源是 `skills/weaver-e10-workflow/aigroup/default.json`(`{defaults, rules[]}`,随 skill 分发、只读),用户意图另存 **CLI 状态目录**下的 `aigroup/user-intents.json`(`aigroup set` 写入,不落 skill 目录)。
|
|
9
|
+
> 现行规则要点:①没有 `aiGroup` ⇒ 全平铺;②`focus:true` ⇒ 按 `focusKeyword`(`[指标, 算子, 值]`,十种算子)确定性成一组,`groupTitle` 为组名,`sysArg` 指明指标取自列表属性还是流程详情;③`focus:false` ⇒ `aiContext`(流程标题/流程详情)交 AI 分组,**必须**给 `aiGroups`;④`focus:true` 收到多个计划子组时**只保留条数最多的一个**,其余平铺;⑤`aiGroups.seq` 已删除,只认 `requestIds`;⑥组摘要 `groupSummary.needAI:false` 时由 CLI 按 JSON `template` 渲染,`true` 时交 AI;⑦单条摘要由 `needSummary` 决定(false ⇒ 用标题);⑧`focus:false` 还可给 `groupingPrompt`(二次分组口径,见下节)。
|
|
10
|
+
|
|
11
|
+
**`groupingPrompt`(2026-10-29 新增,schemaVersion 3)**
|
|
12
|
+
- 位置 `aiGroup.groupRule.groupingPrompt`,**只在 `focus:false` 时有意义**;`focus:true` 给它会直接校验失败。可选,不给就按素材自由分组。
|
|
13
|
+
- 分工:`aiContext` 决定**看什么**(是否预取流程详情),`groupingPrompt` 决定**怎么切**(组名词表、归属规则)。
|
|
14
|
+
- 下发方式:`collect` 会把该字段原样放进 `groupingBrief[].groupingPrompt`,`smartGroup` 的 `ai_groups_required` 报错文案也会带上。**模型生成 `aiGroups` 前必须先读它并照做**(组名只能取它给的词表,不得新造)。
|
|
15
|
+
- 限制:非空字符串、≤500 字(会原样进模型上下文)。
|
|
16
|
+
> 下面各节是按类型描述的**历史口径**,仅作背景参考;与本节冲突时以本节与 `default.json` 为准。
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### 用户意图 → JSON(2026-10-28 新增,模型负责理解、CLI 负责落盘)
|
|
21
|
+
|
|
22
|
+
用户这轮给了**侧重点/阈值口径**(如"300 元以内的报销单独一组""只看今天到期的")时,把意图转成规则条目并写入用户意图文件:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
weaver-work-cli --json workflow aigroup set --input-json '{"workflowName":["费用报销"],"weight":100,"aiGroup":{"groupRule":{"focus":true,"sysArg":false,"aiContext":"流程详情","focusKeyword":[["报销金额","小于等于",300]],"groupTitle":"300元以内"}}}'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `workflowName` 用**数组**写别名(用户原话里的叫法都放进去);匹配是"精确别名优先 → 包含命中按 weight 升序 → `*` 兜底"。
|
|
29
|
+
- **意图条目一定要给更小的 `weight`**(默认规则按 100/200/… 排,意图建议 10~90),否则包含命中时会输给默认条目。
|
|
30
|
+
- `focus:true` 必须给 `focusKeyword`(`[指标, 算子, 值]`,`介于` 用四元组);`sysArg:true` 表示指标是列表自带属性(如 `planFinishDatetime`),`false` 表示从流程详情字段取。
|
|
31
|
+
- `focus:false` 必须给 `aiContext`(`流程标题`/`流程详情`),运行时由 AI 分组、**必须**给 `aiGroups`。
|
|
32
|
+
- **不允许**用 `workflowName:["*"]`(兜底规则归 `aigroup/default.json`);同一 `workflowName` 再次写入是**整条覆盖**。
|
|
33
|
+
- 写入后用 `weaver-work-cli --json workflow aigroup show` 复核;`aigroup clear` 清空意图(不动默认规则)。
|
|
34
|
+
|
|
5
35
|
## 0. 术语(改代码、写文档、对话都用这套说法)
|
|
6
36
|
|
|
7
37
|
| 名词 | 含义 | 对应实现 |
|
|
@@ -134,7 +164,7 @@ collect
|
|
|
134
164
|
}
|
|
135
165
|
```
|
|
136
166
|
|
|
137
|
-
`totalCount` = **按 `requestId` 去重后的条数**(= collect 取到的全部条数),**不是** `wfIdGroup[].count` 之和:优先组是叠加视图,Σ`count` 会大于 `totalCount
|
|
167
|
+
`totalCount` = **按 `requestId` 去重后的条数**(= collect 取到的全部条数),**不是** `wfIdGroup[].count` 之和:优先组是叠加视图,Σ`count` 会大于 `totalCount`。大分组(优先组与普通组)`defaultExpanded=true`,只有汇总项(ai二次分组,`type:"group"`)为 `false`;普通组先放汇总项,再放单条。漏分、缓存命中、详情失败等诊断信息放在信封或 `meta`,不放进业务对象。
|
|
138
168
|
|
|
139
169
|
## 5. 摘要阶段
|
|
140
170
|
|
|
@@ -154,25 +184,47 @@ collect
|
|
|
154
184
|
|
|
155
185
|
- 最终业务数组完整返回,不因输出大小裁剪或改写;warnings 可在 operation 信封和 `meta.warnings` 中出现,其他诊断字段只放在 `meta`,不混入业务对象。
|
|
156
186
|
- `detailPrefetch`、`pageSize` 和旧拼写 `smartSmmaryTitle` 仅为兼容,新调用使用当前字段。
|
|
157
|
-
-
|
|
158
|
-
|
|
159
|
-
### 6.1
|
|
160
|
-
|
|
161
|
-
|
|
187
|
+
- 复杂批次可以使用 skill 自带的 `tools/todo-summary.cjs`(与本文件同目录层级下的 `tools/`),但脚本只是 CLI 编排器,不能绕过本 operation 的校验和输出契约。
|
|
188
|
+
|
|
189
|
+
### 6.1 交付形态:`params.dataSource` + 落文件(2026-10-28 现行口径)
|
|
190
|
+
|
|
191
|
+
**2026-10-28 用户在 OA 页面实测通过后定稿**:载荷不再内联明细,只给一个本地 GET 地址,由组件自己取三键。
|
|
192
|
+
|
|
193
|
+
- 脚本**默认**就走这条(`finish` 不带参数即生效):把
|
|
194
|
+
`params.data.dataSource = http://127.0.0.1:<port>/s/<token>/todo.json` 写进载荷(**注意是 `params.data` 里的 `dataSource`,不是 `params.dataSource`**),不再带明细。
|
|
195
|
+
- **单进程多快照(2026-10-29 方案 B)**:`todo-serve.cjs` 是**全局单例**,同一时间只有一个进程、一个端口。
|
|
196
|
+
进程信息记在 `<tmpdir>/weaver-work-cli-serve/current.json`(`{pid, port, version}`),同版本且 pid 存活就复用,
|
|
197
|
+
不会每次汇总都新起一个(旧实现的「一次汇总一个进程」已废弃)。
|
|
198
|
+
- 每份汇总 = 一个快照目录 `<tmpdir>/weaver-work-cli-serve/snapshots/<token>/todo.json`,
|
|
199
|
+
URL 形态 `/s/<token>/todo.json`(同时兼容旧的 `/todo.json?token=`)。
|
|
200
|
+
**多份快照并存互不覆盖**,旧链接在各自空闲期内继续可用。
|
|
201
|
+
- 淘汰按**快照**计:目录 mtime 超过 30 分钟即在下次访问时删掉并返 404 `snapshot_expired`;
|
|
202
|
+
所有快照都过期且全局无请求满 30 分钟,进程退出并删 `current.json`。
|
|
203
|
+
- 快照根目录取 `os.tmpdir()` 而非家目录:沙箱会拦后台进程对家目录的删除(EPERM),临时目录不受限。
|
|
204
|
+
- 响应体 = `params.data` 的三键对象**原样**(`smartSummaryTitle` / `totalCount` / `wfIdGroup`),组件拿到不需要任何转换。
|
|
205
|
+
- 必回的头(缺一前端就废):`Access-Control-Allow-Origin`(回显请求 Origin)、`Access-Control-Allow-Private-Network: true`(Chrome 私有网络预检必需)、`Access-Control-Max-Age`。
|
|
206
|
+
- 排错:`GET /health` 返回 `{pid, port, snapshots, hits}`;每个输出目录下的 `serve.json` 记录本次的 url/token/snapshotDir。
|
|
207
|
+
- **正文必须内联完整的 `<browsertool>...</browsertool>` 块**(标签成对):dataSource 版载荷只有约 900 B,不算大载荷,所以照常内联;块内 `params.data.dataSource` 指向本地服务,**不内联明细数据**。
|
|
208
|
+
- **另存一份纯 JSON 文件**(内容是三键数据本身,不是载荷外框):`~/Downloads/<用户名>_<YYYYmmddHHMMSS>.json`,落盘后 `present_files` 打开。
|
|
209
|
+
`用户名` = 认证系统当前登录人的 `username`(`auth whoami` 拿 `employeeId` → `hrm.employee.detail` 取 `username`),
|
|
210
|
+
**不要用本机账号名或数字 ID**。
|
|
211
|
+
- 回退:`--no-serve` 时回到旧的「内联 `params.data` 整块 + 内联 `<browsertool>`」形态,下列旧规则只在回退分支生效。
|
|
212
|
+
|
|
213
|
+
**旧口径(2026-10-27,现仅 `--no-serve` 分支适用)**:不区分宿主与 agent 类型,交付**固定两份、缺一不可**:
|
|
162
214
|
|
|
163
215
|
- **① 回复正文里直接内联完整的 `<browsertool>...</browsertool>` 块**(不省略、不用路径代替)+ 各阶段耗时。
|
|
164
|
-
- **② 同时另存一份不带标签的纯 JSON 文件**(内容 =
|
|
216
|
+
- **② 同时另存一份不带标签的纯 JSON 文件**(内容 = 同一个载荷对象),落盘后立刻用 `present_files` 打开。
|
|
165
217
|
- 标签**必须成对**:`<browsertool>` 开头、`</browsertool>` 结尾;漏标签或只贴裸 JSON 都算交付失败。
|
|
166
218
|
- `params.data` 的值就是最终三键对象(`smartSummaryTitle` / `totalCount` / `wfIdGroup`)**原样**:不裁剪、不改字段名、不再外包一层。
|
|
167
219
|
- 载荷里除 `params.data` 外**不要**再带 `schemaVersion` / `ok` / `operation` / `meta` / `warnings` 等信封字段。
|
|
168
|
-
- 外框字段全部固定,只有 `src` 与 `params.data`
|
|
220
|
+
- 外框字段全部固定,只有 `src` 与 `params.data` 会变。其中 `callId` **固定写死为 `todo_summary`**、`toolId` **固定写死为 `fill_form`**(规范,不随调用变化,不要改写成 `call-1` 或其它值):
|
|
169
221
|
|
|
170
222
|
```text
|
|
171
223
|
<browsertool>
|
|
172
224
|
{
|
|
173
225
|
"version": "1.0",
|
|
174
|
-
"callId": "
|
|
175
|
-
"toolId": "
|
|
226
|
+
"callId": "todo_summary",
|
|
227
|
+
"toolId": "fill_form",
|
|
176
228
|
"arguments": {
|
|
177
229
|
"type": "e10",
|
|
178
230
|
"title": "待办摘要汇总",
|
|
@@ -185,7 +237,7 @@ collect
|
|
|
185
237
|
"routerProps_mobile": { "initialEntries": ["/"] },
|
|
186
238
|
"params_pc": { "app": "@weapp/workflow", "compName": "Comp.WflTodoSummary", "clientType": "pc" },
|
|
187
239
|
"params_mobile": { "app": "@weapp/workflow", "compName": "Comp.WflTodoSummary", "clientType": "mobile" },
|
|
188
|
-
"params": { "
|
|
240
|
+
"params": { "dataSource": "http://127.0.0.1:18765/todo.json?token=<one-time>" }
|
|
189
241
|
}
|
|
190
242
|
}
|
|
191
243
|
}
|
|
@@ -247,8 +299,8 @@ collect
|
|
|
247
299
|
本分支**不走**公共输出层的 24 KB 落盘投影:`workflow/index.ts` 对 `workflow.todoSmartConvert` 显式传 `persist: false`(注释写明「业务契约要求直接返回完整 `requestDatas`/`displayItems`;禁止公共输出层按 24 KB 预算递归折叠该分支」)。因此不会产生 `refId` / `resultFile`,也不会被折叠或裁剪,体积全部由调用方承担。
|
|
248
300
|
|
|
249
301
|
- 体积按 **约 700 B/条** 估算:1 条 ≈ 750 B,30 条 ≈ 21 KB,70 条 ≈ 49 KB,300 条 ≈ 210 KB。
|
|
250
|
-
-
|
|
251
|
-
-
|
|
302
|
+
- **dataSource 模式(默认,2026-10-28 起)**:载荷只有约 **800 B**(只是一个 URL),体积不再受对话容量限制——300 条、1000 条都一样。明细走 HTTP,不受单条消息上限约束。
|
|
303
|
+
- **只在 `--no-serve` 回退时**才受内联上限约束:组件要求**一个**块内联完整 `data`,**不能按组拆块**;超过约 80 KB(≳110 条)时先说明条数与预计体积。
|
|
252
304
|
|
|
253
305
|
## 7. 常用命令
|
|
254
306
|
|
|
@@ -279,4 +331,4 @@ weaver-work-cli --json workflow run workflow.todoSmartConvert --input-json '{"st
|
|
|
279
331
|
| `forbidden_endpoint` | 只允许列表取数接口,检查是否误用了辅助分页接口 |
|
|
280
332
|
| `authentication` / `network` | 按共享 skill 的认证和失败规则处理,不盲目重试 |
|
|
281
333
|
|
|
282
|
-
|
|
334
|
+
最终交付(2026-10-28 起):**载荷里给 `params.dataSource`(本地服务,脚本默认已生成)+ 一份 `<用户名>_<时间戳>.json` 文件用 `present_files` 打开**,正文只写结论与耗时,**不再内联大载荷**;只有 `--no-serve` 回退时才回到「内联 `<browsertool>` + 纯 JSON 文件」两份。不要用 Markdown 报告或摘要清单替代交付物,也不要产出「耗时说明 md」(见 §6.1、§6.1.3)。
|
|
@@ -57,7 +57,7 @@ weaver-work-cli --json workflow run workflow.search --input-json '{"category":"t
|
|
|
57
57
|
|
|
58
58
|
`workflow.memoryPrompt` 用于读取用户记忆(工作流消歧、摘要字段优先级、展示偏好等)。其返回**顺带附带 OA 版本与当前用户身份**(可能缺失),无需再单独查询:
|
|
59
59
|
|
|
60
|
-
- `oaContext.version`:OA 系统版本,用于判断待办查询是否走智能分组(≥ `10.0.
|
|
60
|
+
- `oaContext.version`:OA 系统版本,用于判断待办查询是否走智能分组(≥ `10.0.9807.01`)等版本分支。
|
|
61
61
|
- `oaContext.user`:`position`(岗位)、`department`(部门)、`subcompany`(分部,可能为空,为空时忽略分部,不要臆造)。
|
|
62
62
|
|
|
63
63
|
记忆读取时机:本轮尚未读过记忆,或距上次成功读取超过 6 小时时,先调用 `workflow.memoryPrompt`;之后复用,不重复调用。
|
|
@@ -104,7 +104,7 @@ weaver-work-cli --json workflow run workflow.memoryExtract --input ./mem-extract
|
|
|
104
104
|
|
|
105
105
|
- memoryPrompt:`available`、记忆提示词、`oaContext`(可能缺失)。
|
|
106
106
|
- `oaContext.smartGrouping`:**当前环境是否支持「智能分组」**(布尔,由 CLI 按 OA 版本判定)。泛化待办查询**直接看它分流**:`true` → 先 `workflow.todoStat` 统计,再带 `planJson` 取数;`false` → 直接 `workflow.search`(CLI 自带分组统计)。**不要自己拿 `version` 比大小**;字段缺失(`oaContext` 为 `null`)时按 `false` 处理。
|
|
107
|
-
- `oaContext.version`:OA 版本(如 `10.0.
|
|
107
|
+
- `oaContext.version`:OA 版本(如 `10.0.9807.01`),**仅作背景信息**——判模式一律用 `smartGrouping`。
|
|
108
108
|
- `oaContext.user.position`:岗位;`oaContext.user.department`:部门;`oaContext.user.subcompany`:分部(可能为空,为空忽略);`oaContext.user.employeeId`:用户标识。
|
|
109
109
|
- `oaContext` 取不到时为 `null` 并带 `oaContextMissing: true`,不影响记忆主体。
|
|
110
110
|
- memoryExtract:`saved`(true/false 真实结果)。
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
| Operation | 固定规则 |
|
|
28
28
|
| --- | --- |
|
|
29
29
|
| `workflow.search` | CLI 按 OA 版本自动路由执行模式(智能分组/低版本)。`category` 必填;`current` 默认 1、`pageSize` 默认 10(最大 100)、`conditionType` 默认 `and`、`totalOnly` 默认 false。只读,无需 confirm。 |
|
|
30
|
-
| `workflow.todoStat` | `category` **必带且固定为 `todo`**(只统计待办,不支持其他分类)。**仅 OA ≥ `10.0.
|
|
30
|
+
| `workflow.todoStat` | `category` **必带且固定为 `todo`**(只统计待办,不支持其他分类)。**仅 OA ≥ `10.0.9807.01` 支持**;低版本不支持本 operation,待办查询直接走 `workflow.search`。不分页、无统计行。只读。 |
|
|
31
31
|
|
|
32
32
|
`workflow.todoStat` **不支持的 `workflow.search` 专有参数**(不要传,会报错或被忽略):
|
|
33
33
|
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
| category | 含义 | 未传 subCategory 的默认小分类 |
|
|
42
42
|
| --- | --- | --- |
|
|
43
|
-
| `todo` | 待办 | **低版本模式(OA < `10.0.
|
|
43
|
+
| `todo` | 待办 | **低版本模式(OA < `10.0.9807.01`)= 待处理(7);智能分组模式(OA ≥ `10.0.9807.01`)= 全部(0)** |
|
|
44
44
|
| `done` | 已办 | 默认全部 |
|
|
45
45
|
| `mine` | 我发起的 | 默认全部 |
|
|
46
46
|
| `all` | 全部 | 默认全部 |
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
|
|
150
150
|
CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际返回内容直接渲染,不要互相套用规则**:
|
|
151
151
|
|
|
152
|
-
| | OA < `10.0.
|
|
152
|
+
| | OA < `10.0.9807.01`(低版本模式) | OA ≥ `10.0.9807.01`(智能分组模式) |
|
|
153
153
|
| --- | --- | --- |
|
|
154
154
|
| 未明确小分类的 `todo` 默认 | 待处理(7) | 全部(0) |
|
|
155
155
|
| CLI 侧分组 | **有**——未明确小分类时按「紧急 → 超时 → 待处理」分组输出(附 `todoSummary`/`todoGroups`) | 无——不分组,纯卡片列表 |
|
|
@@ -161,7 +161,7 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
|
|
|
161
161
|
|
|
162
162
|
**模式从哪看**:`workflow.memoryPrompt` 返回的 `oaContext.smartGrouping`(`true` = 智能分组模式,`false` = 低版本)。`workflow.search` **不返回**模式字段,**不要**为了判断模式额外调用命令,也**不要**自己拿版本号去比大小。
|
|
163
163
|
|
|
164
|
-
**模式怎么定**:一律以 `oaContext.smartGrouping` 为准——它是 CLI 按 OA 版本(基线 `10.0.
|
|
164
|
+
**模式怎么定**:一律以 `oaContext.smartGrouping` 为准——它是 CLI 按 OA 版本(基线 `10.0.9807.01`)算好的结论。**不要自己拿 `oaContext.version` 去比大小**(四段式逐段整数比较容易出错),`version` 只是背景信息;会话取不到版本时该值为 `false`,按低版本处理。
|
|
165
165
|
|
|
166
166
|
低版本模式的**探查/待阅接口异常时 CLI 直接失败返回**(`ok:false`),不会退化为「无超时/无紧急」——遇到这类失败按异常返回处理,**不要把它当作 0 条继续渲染**。
|
|
167
167
|
|
|
@@ -184,9 +184,9 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
|
|
|
184
184
|
|
|
185
185
|
---
|
|
186
186
|
|
|
187
|
-
# 智能分组(仅待办查询,OA ≥ `10.0.
|
|
187
|
+
# 智能分组(仅待办查询,OA ≥ `10.0.9807.01`)
|
|
188
188
|
|
|
189
|
-
**适用前提**:本节仅在 **`oaContext.smartGrouping === true`**(OA ≥ `10.0.
|
|
189
|
+
**适用前提**:本节仅在 **`oaContext.smartGrouping === true`**(OA ≥ `10.0.9807.01`)时生效。`smartGrouping === false`(低版本)的待办查询**不执行本节**——直接 `workflow.search`,其返回自带统计行与分组标题,原样渲染即可。
|
|
190
190
|
|
|
191
191
|
**模式来源**:`workflow.memoryPrompt` 返回的 `oaContext.smartGrouping`(智能分组流程第一步本就读取记忆,**直接看这个布尔值即可,不要自己比版本号**)。`oaContext` 为 `null` 或字段缺失时按 `false`(低版本)处理,不要自行调用 whoami 或其他命令补齐。
|
|
192
192
|
|
|
@@ -196,6 +196,8 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
|
|
|
196
196
|
|
|
197
197
|
| 查询意图 | 必走路径 |
|
|
198
198
|
| --- | --- |
|
|
199
|
+
| 原话含 **「汇总待办」/「批量处理待办」/「摘要」**(归拢类诉求) | **不走本节**:转 `workflow.todoSmartConvert`(见 `SKILL.md`「待办『汇总』vs『统计』分流」与 [`todo-smart-convert.md`](./todo-smart-convert.md))。**不要**用本节链路"探一眼",也不要先跑 `todoStat` 再决定 |
|
|
200
|
+
| 原话含 **「统计待办」**(纯统计诉求) | 才允许走本节 + `workflow.todoStat`(仍须 `smartGrouping === true`);含汇总/摘要时不走这条 |
|
|
199
201
|
| 泛化待办查询(多工作流、未指明具体流程) | **按 `oaContext.smartGrouping` 分流**:`false`(低版本)→ 直接 `workflow.search`(category=todo,**不带 `planJson`/`subCategory`**),CLI 已直接输出分组统计与卡片,**原样渲染即结束**;`true`(智能分组)→ 调 `workflow.todoStat` 统计 → 按「参与身份 → 分组去向表」+ 汇报式分组骨架规划 → 打包为一次带 `planJson` 的 `workflow.search` 取数 |
|
|
200
202
|
| 查询**单个工作流**的数据(用户意图聚焦某个工作流;或 `countDetails` 归并后仅剩单工作流) | **必须先做字段分组判断**(见下「按重点字段组织分组」):有可分层价值字段 → 按字段分组;确无价值字段 → 才可平铺 |
|
|
201
203
|
| `oaContext.smartGrouping === false`(低版本 OA) | 不执行本节后续步骤——直接 `workflow.search`,CLI 已直接输出分组统计与卡片,原样渲染返回 |
|
|
@@ -210,7 +212,7 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
|
|
|
210
212
|
|
|
211
213
|
## 执行流程
|
|
212
214
|
|
|
213
|
-
1.
|
|
215
|
+
1. **先分流(按原话验词,再看 `oaContext.smartGrouping`,不要探测、不要自己比版本号)**:**本轮原话含「汇总待办」/「批量处理待办」/「摘要」→ 整个「执行流程」不适用,直接转 `workflow.todoSmartConvert`**;原话含「统计待办」或三类词都没有的泛化待办查询时——`smartGrouping === false`(低版本)→ **直接调 `workflow.search`(category=todo,不带 `planJson`/`subCategory`)**,CLI 已输出分组统计与卡片,**原样渲染即结束,不进入本节后续步骤**;`smartGrouping === true` → 先调用 `workflow.todoStat` 查询当前用户整体待办分组计数(按工作流 × 参与节点 × 参与身份三元组)再继续。**不要在 `smartGrouping === true` 之前先调 `workflow.todoStat`**——低版本会报 `todo_stat_requires_smart_mode`(错误 JSON 在 stderr、stdout 为空),纯属白费一次调用;如果查询意图是指向具体某个工作流的追问,可直接复用本对话之前 `workflow.todoStat` 结果中该工作流的工作流信息(`workflowId`/`workflowName`)与表单字段信息(`formFields`),不必重新调用;否则(泛化多工作流查询且已确认 smart 模式,或本对话尚无该工作流信息)必须先调用。
|
|
214
216
|
`countDetails` **行完整性由 CLI 保证**(行全量返回不随输出大小截断,大输出仅移除行内 `formFields`)——**无需自校验求和、无需读 `resultFile` 核对行数、也无需对 CLI 输出做管道截断**;`resultFile` 仅在需要对某工作流做**字段分组判断**(取其 `formFields`)时才读。
|
|
215
217
|
|
|
216
218
|
2. **规划分组结构与查询边界(先于任何查询锁定;既定即不得事后重组)**:**先分流查询意图**——
|
|
@@ -231,7 +233,7 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
|
|
|
231
233
|
|
|
232
234
|
构造各档的 `filterFields` 时:**有 `formFields` 就优先用它的 ID**——`fieldName` 用 `字段名(字段ID)`(字段 ID 取该字段 `fieldId`)、选项类 value 用 `选项名称(选项ID)`(选项 ID 取 `options` 中对应选项的 `id`);`formFields` 已提供精确 ID 时**不要退回纯名称试探**(纯名称在存在重名字段/选项时会触发多候选澄清,多花一轮)。
|
|
233
235
|
|
|
234
|
-
**低版本模式(OA < `10.0.
|
|
236
|
+
**低版本模式(OA < `10.0.9807.01`,无 `formFields` 来源)**:直接传纯字段名即可——CLI 会读该工作流的表单字段元数据做解析,不需要模型事先拿到字段 ID;解析不出会报错并列出候选(见「表单字段筛选」)。**禁止凭记忆拼字段名或改用系统条件硬凑**:这类条件会被丢弃,返回的是未筛选的全量数据。
|
|
235
237
|
|
|
236
238
|
各档/组各对应一条查询计划(与骨架一致,走同一次 `planJson` 或单条并行),分档应保证每档有实际数据(数量均衡、避免空档)。
|
|
237
239
|
|
|
@@ -524,7 +526,7 @@ CLI 按 OA 版本自动路由,**两种模式的返回形态不同,按实际
|
|
|
524
526
|
|
|
525
527
|
## 智能分组示例
|
|
526
528
|
|
|
527
|
-
> 以下示例适用于智能分组模式(OA ≥ `10.0.
|
|
529
|
+
> 以下示例适用于智能分组模式(OA ≥ `10.0.9807.01`),为**示意**(角色与流程为演示,非真实数据)。示例 1-3 为泛化待办查询,统一按**汇报式分组骨架**推演(统计 → 按去向表划组 → **构造 planJson 一次调用取数** → 按固定顺序渲染);示例 4 为聚焦单个工作流的字段分组样板(独立路径,不套骨架)。要点:分组标题与标题下汇总摘要由模型书写;卡片来自各组 `finalMarkdown` **原样粘贴**;展开组 N 取该组 `total`、折叠组 N 取 `total`/`byWorkflow`;卡片自带徽标保留原样,模型**不要**再给卡片补加"紧急/超时"等文字。
|
|
528
530
|
|
|
529
531
|
**示例 1:总经理问"今天有哪些待办需要我处理?"**(完整骨架:特殊组 + 业务域展开 + 折叠)
|
|
530
532
|
|
|
@@ -823,7 +825,7 @@ weaver-work-cli --json workflow run workflow.search --input-json '{"category":"t
|
|
|
823
825
|
|
|
824
826
|
- **禁止编造字段**:所有字段名必须与 `weaver-work-cli workflow schema` 完全一致(camelCase)。`workflow.search` 与 `workflow.todoStat` 都支持 `workflowType`(工作流类型筛选)。
|
|
825
827
|
- **schema 中不存在的字段不要用**:例如发起人关系词(`creatorTerm` 之类)与节点名称列表(`nodeNames` 之类)在 schema 中没有对应字段。按发起人筛选用 `creator`/`creatorDept`/`creatorSubcom`;按参与节点筛选用 `nodeId` + `nodeIdTerm`。
|
|
826
|
-
- **OA 版本分支**:`workflow.todoStat` 仅 OA ≥ `10.0.
|
|
828
|
+
- **OA 版本分支**:`workflow.todoStat` 仅 OA ≥ `10.0.9807.01` 支持;低版本待办查询直接用 `workflow.search`,不要调用 `todoStat`。智能分组仅 OA ≥ `10.0.9807.01` 生效。
|
|
827
829
|
- **最终回复以 `finalMarkdown` 为准**:它已按 OA 版本自动渲染好,整段原样输出即可,不要自行裁剪、改写或重新拼装卡片。智能分组模式返回纯卡片列表、无顶部统计行;低版本模式自带顶部行(分组汇总/总条数)与探查提示。
|
|
828
830
|
- **低版本模式不要自行分组**:该模式的分组、计数与分组标题**全部由 CLI 输出**(`finalMarkdown` 已含),不要再调 `todoStat`、不要自己按工作流/身份归类。用户未明确小分类时即走分组输出;要按小分类查(转发/抄送/待阅等)时显式传 `subCategory`,此时为普通列表输出。
|
|
829
831
|
- **低版本模式分页只留在分组标题里**:分组标题 `### 组名(共 N 条,第 X 页显示 M 条)` 已含分页信息,顶部汇总只说总量与构成;**不要自行补页码行、不要重复当前页**。用户要"下一页/全部/更多"时用 `workflow.search` 传 `current N` 续查后**原样渲染新返回**(不重跑已渲染过的页、不自行拼接多页卡片)。
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
|
|
19
19
|
- `requestId`:流程请求 ID(整数或纯数字字符串)。用户已给出 ID 时直接用,不要先查列表再过滤。
|
|
20
20
|
- `index`:基于当前会话最近一次查询结果的序号(从 1 开始)。
|
|
21
|
-
- `group`:分组标识(`urgent`/`overdue`/`batch`/`pending`),**仅分组场景必填**——低版本模式(OA < `10.0.
|
|
21
|
+
- `group`:分组标识(`urgent`/`overdue`/`batch`/`pending`),**仅分组场景必填**——低版本模式(OA < `10.0.9807.01`)通用待办分组展示时每个分组序号独立从 1 开始,必须同时传 `group` + `index`。
|
|
22
22
|
- 只传 `index` 不传 `group` 会定位到其他分组的同序号流程。
|
|
23
23
|
|
|
24
|
-
**智能分组模式(OA ≥ `10.0.
|
|
24
|
+
**智能分组模式(OA ≥ `10.0.9807.01`)查询不产生分组,定位时只传 `index`,不传 `group`。**
|
|
25
25
|
|
|
26
26
|
## 输入 —— 各 operation 字段
|
|
27
27
|
|