feat: complete production workflow migration

This commit is contained in:
2026-08-06 14:29:57 +08:00
parent 7f215e79c4
commit 8df5266abb
448 changed files with 56937 additions and 14619 deletions
@@ -0,0 +1,58 @@
---
name: purchase-confirmation-workflow
description: 触发采购确认通知工作流 (purchase-confirmation)
triggers:
- manual: 用户要求"执行/触发 purchase-confirmation"
- scheduled: 通过 cron 定时触发
---
# Purchase Confirmation Workflow
Trigger the `purchase-confirmation` (采购确认通知工作流) from the `${GYXX_PROJECT_ROOT}` orchestrator.
## ⚠️ Important Execution Notes
- **执行时间长**:此工作流包含浏览器自动化(Chrome CDP),采集脚本执行时间约 **5-15 分钟**,请耐心等待,**不要**超时后随意清理锁和进程
- **不要主动终止**:看到超时不要清理锁/杀进程,工作流可能仍在正常执行
- **判断完成**:检查 `shared-data/purchase-confirmation/` 目录中是否有 CSV 文件(如 `采购确认通知汇总_YYYYMMDD_HHMMSS.csv`
## Workflow Command
```bash
cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run purchase-confirmation
```
工作流通过 Hermes MCP 网关执行,包含采集端和分析端两个阶段。
## 创建定时任务
```python
cronjob(action='create',
prompt='执行 purchase-confirmation 工作流。运行命令:cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run purchase-confirmation',
schedule='0 9 * * *', # 每天早上9点
name='purchase-confirmation-daily')
```
## 通知规则(关键)
⚠️ **采集端通知规则**:采集端 Hermes 只通知运营,不通知业务目标用户。
- 采集端通知对象:运营(飞书 OpenID `ou_7ad5fc8012e2f741afc5346e05ffd447`
- 业务最终通知:由分析端 Hermes 负责
- 通知方式:通过当前会话直接响应(不调用 send_message/yuanbao 派)
当用户请求"只通知我(不要通知业务目标用户)"时:
1. 直接在当前会话中以文本形式输出报告
2. 说明通知范围:仅运营,业务目标用户由分析端 Hermes 负责
## 工作流配置参考
- **工作流名称**purchase-confirmation
- **显示名称**:采购确认通知工作流
- **采集脚本**`${GYXX_PROJECT_ROOT}/orchestrator/scripts/collect_confirmation.ps1`
- **输出文件**`采购确认通知汇总_*.csv`xlsx 格式)
- **通知目标**(业务用户):
- `ou_7ad5fc8012e2f741afc5346e05ffd447`
- `ou_339c1d396b397c97b08e1bf377963d40`
- `ou_54141d75b24d22ddc8c1c4d66e00b6e9`
- **采集端绑定应用**`cli_aa8c4fb4c4f81cd3`
- **分析端绑定应用**`cli_aa8c4fc918b85cce`
@@ -0,0 +1,34 @@
---
name: purchase-order-update-workflow
description: 触发采购单日期更新工作流 (purchase-order-update)
category: workflow
triggers:
- manual: 用户要求"执行/触发 purchase-order-update"
- scheduled: 通过 cron 定时触发
---
# Purchase Order Update Workflow
Trigger the `purchase-order-update`(采购单日期更新工作流)from the `${GYXX_PROJECT_ROOT}` orchestrator.
## Workflow Command
```bash
cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run purchase-order-update
```
## 工作流配置(来源 bytecode 反向提取)
| 字段 | 值 |
|------|-----|
| **工作流名称** | purchase-order-update |
| **显示名称** | 采购单日期更新工作流 |
| **采集脚本** | `collect_purchase_order_update.ps1` |
| **输出文件** | `update_result.json` |
| **分析端通知方式** | `plugin:feishu.im.send_message` |
| **采集端绑定应用** | `cli_aa8c4fb4c4f81cd3` |
| **分析端绑定应用** | `cli_aa8c4fc918b85cce` |
## ⚠️ config.py 源文件已丢失
此工作流配置从 bytecode 反向提取,如需修改通知目标,需先重建 `config.py`
@@ -0,0 +1,41 @@
---
name: replenishment-alert-workflow
description: 触发库存预警通知工作流 (replenishment-alert)
triggers:
- manual: 用户要求"执行/触发 replenishment-alert"
- scheduled: 通过 cron 定时触发
---
# Replenishment Alert Workflow
Trigger the `replenishment-alert` (库存预警通知工作流) from the `${GYXX_PROJECT_ROOT}` orchestrator.
## Trigger Conditions
- **手动触发**:用户明确要求"执行/触发 replenishment-alert"
- **定时触发**:通过 cron 任务定期运行
## Workflow Command
```bash
cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run replenishment-alert
```
工作流通过 Hermes MCP 网关执行,包含采集端和分析端两个阶段。
## 已知问题
⚠️ **通知重复问题**:如需修复,从 `config.py``notification_targets.threshold_alert` 中移除 analyzer owner。但注意:`config.py` 源文件已丢失(仅 pyc 缓存),修改前需先重建配置。
⚠️ **config.py 源文件已丢失**:仅存 `__pycache__/config.cpython-311.pyc`,如需修改通知目标,需从 bytecode 反向提取常量后再重建文件。
## 工作流配置参考
- **工作流名称**replenishment-alert
- **显示名称**:库存预警通知工作流
- **采集脚本**`${GYXX_PROJECT_ROOT}/orchestrator/scripts/collect_replenishment.ps1`
- **输出文件**`threshold_alert_data.json`
- **通知目标**(业务用户,仅 `threshold_alert`,来源 bytecode const[53]):
- `ou_b76e4cbdb24fe28cebd45ad091b60224`(黄坤平)
- **采集端绑定应用**`cli_aa8c4fb4c4f81cd3`
- **分析端绑定应用**`cli_aa8c4fc918b85cce`
@@ -0,0 +1,54 @@
---
name: replenishment-workflow
description: 触发补货建议工作流 (replenishment)
triggers:
- manual: 用户要求"执行/触发 replenishment"
- scheduled: 通过 cron 定时触发
---
# Replenishment Workflow
Trigger the `replenishment` (补货建议工作流) from the `${GYXX_PROJECT_ROOT}` orchestrator.
## ⚠️ Important Execution Notes
- **执行时间长**:此工作流包含浏览器自动化(Chrome CDP),采集脚本执行时间约 **5-15 分钟**,请耐心等待
- **判断完成**:检查 `shared-data/replenishment/` 目录中是否有 `pending_insert.json``notify_data.json`
- **后台执行**:建议使用 `background=true` + `notify_on_complete=true` 执行,避免超时
## Workflow Command
```bash
cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run replenishment
```
## 创建定时任务
```python
cronjob(action='create',
prompt='执行 replenishment 工作流。运行命令:cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run replenishment',
schedule='0 9 * * *', # 每天早上9点
name='replenishment-daily')
```
## 通知目标(分析端)
仅通知运营(`ou_7ad5fc8012e2f741afc5346e05ffd447`)。不通知黄坤平,不通知审单群。
## 工作流配置参考
- **工作流名称**replenishment
- **显示名称**:补货建议工作流
- **采集脚本**`${GYXX_PROJECT_ROOT}/orchestrator/scripts/collect_replenishment.ps1`
- **输出文件**`pending_insert.json`, `notify_data.json`
- **多维表**:应用 `cli_aa8c4fc918b85cce` 需对多维表 `Th0jbMHHQa7a8Lse3CicfSMBnxb` 有写入权限
- **采集端绑定应用**`cli_aa8c4fb4c4f81cd3`
- **分析端绑定应用**`cli_aa8c4fc918b85cce`
## 已知问题
⚠️ **多维表写入权限**:如遇以下错误,需在飞书开放平台为应用 `cli_aa8c4fc918b85cce` 开启多维表写入权限:
- `91403 Forbidden` — 无权限访问多维表
- `99992402 field validation failed` — 字段验证失败(常见于 app 无写入权限或字段类型不匹配)
写入失败**不影响通知发送**(符合 HARD RULES),但待处理数据需手动补充。
@@ -0,0 +1,57 @@
---
name: workflow-trigger-only
description: 工作流触发原则:只执行既有命令,不自主生成代码修改流程
triggers:
- manual: 用户要求将某个操作原则沉淀为 skill 时创建
---
# Workflow Trigger Only
## 核心原则
**只触发既有工作流,不自主生成或修改流程代码。**
## 执行方式
```
cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run <工作流名>
```
支持的 `<工作流名>`
- `replenishment-alert` — 库存预警通知
- `purchase-confirmation` — 采购确认通知
- `replenishment` — 补货建议
## 规则
1. **只运行既有命令** — 使用 `run.py mcp-run` 触发,不写 Python 脚本绕过后续流程
2. **不自主修改流程代码** — 不修改 `mcp_workflow.py`、通知脚本、采集脚本等,除非用户明确要求
3. **不自主生成新代码** — 不创建新脚本自行完成通知/写表等操作
4. **编排逻辑由既有代码决定** — 采集→分析→通知的分段流程和通知对象由 `mcp_workflow.py` 和分析端 Hermes 控制
## 例外:手动转发心跳/执行报告
"只触发既有命令"规则**仅适用于 orchestrator 工作流执行**。当用户要求将某个工作流的心跳/执行报告**手动转发**给运营时:
1. 构造心跳消息内容(包含工作流 ID、运行 ID、状态、错误信息等)
2. 通过飞书采集端应用(`cli_aa8c4fb4c4f81cd3`)将报告以 **Feishu DM** 形式发送给运营(`ou_8ee224968aa26a74c7d30ba27fed5eeb`
3. **不**通知业务目标用户,不走 yuanbao group
4. 使用 `feishu` skill 中的 temp 脚本模式发送(写临时脚本 → terminal 运行 → 删除),或直接 reply 让 gateway 转发
> 注意:**自动心跳已由 `orchestrator/mcp_workflow.py` 用 Schema 2.0 interactive card 发送**target 同样是 `ou_8ee224968aa26a74c7d30ba27fed5eeb`),本例外仅适用于**人工额外转发**场景(比如重发、转发给第三方等),不要重复发送已自动发出的心跳。
这是人工操作员在对话中转发报告的合法场景,与 orchestrator 自动执行工作流是两回事。
## 触发命令参考
| 工作流 | 命令 |
|--------|------|
| 库存预警通知 | `cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run replenishment-alert` |
| 采购确认通知 | `cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run purchase-confirmation` |
| 补货建议 | `cd ${GYXX_PROJECT_ROOT} && .venv/Scripts/python.exe run.py mcp-run replenishment` |
## 为什么这样做
- 工作流的编排逻辑(采集、分析、通知分段执行)由 `mcp_workflow.py` 控制
- 通知对象由 `config.py` 和分析端 prompt 决定,不应在触发层硬编码
- 自主生成代码容易出错且难以追踪