feat: 2026-07-11 全量更新 - 代办集成+会议室预定+知识迭代修复+UI统一+Bug修复

== 已部署上线 (9项) ==
- 代办事项真实数据源集成 (企微审批API 8bug修复链)
- H5/坐席端 Logo样式统一+绿色背景
- 视频引导页修复 (localStorage key v2)
- 坐席端 v9 Vue版本修复 (ElMessage._context)
- 截图按钮 v10 修复 (getDisplayMedia user gesture)
- 扫码样式恢复+H5扫码登录跳转修复
- H5截图快捷键提示

== 代码完成待部署 (3项) ==
- 知识迭代3Bug修复 (#8 POST端点/#7 MERGE幂等/#6 过期检查)
- 会议室预定-小鱼易联终端 (40文件, 40/40测试通过)
- IT资产升级审批推送 (asset_service.py)

== 需求文档 (2项) ==
- 坐席端AI辅助消息框-PRD (4项新功能确认)
- 坐席端布局优化建议 v2.0 (7天计划)

== 新增文档 ==
- 日报-2026-07-11.md
- 知识迭代Bug修复报告-20260711.md
- 会议室预定-部署指南.md
- CHANGELOG.md 更新

== 测试 ==
- test_todo_integration.py: 40/40
- test_meetingroom.py: 40/40
- test_bugfix_ki_suggestions.py: 21/21
This commit is contained in:
Simon
2026-07-11 23:13:10 +08:00
parent 3d152fc8eb
commit bea288e414
928 changed files with 85169 additions and 54205 deletions
+72
View File
@@ -0,0 +1,72 @@
# 审批类型扩展、卡片直跳与同窗口导航改造 — 部署完成
## TL;DR
审批流程系统已从 5 种扩展到 **12 种审批类型 / 18 个审批流程**,H5 卡片点击可直接跳转对应审批 URL;为进一步贴合企微 H5 体验,已将跳转方式从 `window.open`(新标签页)改为 `window.location.href`(同窗口导航),由企微原生提供返回按钮。后端与前端代码修改均已部署到生产环境并通过验证。
## 交付概览
| 项目 | 状态 |
|------|------|
| 后端 `approval.py` 18 个模板 + 12 类关键词 | 已部署,API 验证通过 |
| 前端 H5 17 个审批卡片 + URL 直跳 | 已构建部署,页面可正常访问 |
| 审批卡片同窗口导航改造 | 已部署:两处 `window.open` 改为 `window.location.href` |
| 生产容器状态 | backend / nginx 均健康运行 |
| 浏览器端验证 | H5 登录页渲染正常,无 JS 报错 |
| 已知问题 / 遗留 | 无 |
| Dify System Prompt v2 | 已由用户在 Dify 后台发布 |
| 功能文档归档 | PRD v2.2 + 架构文档 v2.2 已更新 |
## 新增审批类型(7 种)
1. 会议室故障报修
2. 企业应用管理
3. 资产变更确认
4. 终端设备网络准入
5. 活动与会议技术支持
6. 员工IT支持与故障报修
7. 公共邮箱账号申请
## 本次导航改造说明
用户提出审批页面应"内嵌打开带有返回和关闭"。经技术验证:
- 企微审批 URL 未设 `X-Frame-Options`,理论上可被 iframe 嵌入;
- 但 H5 生产环境配置了 `Cross-Origin-Embedder-Policy: require-corp` + CSP `default-src 'self'`,跨域 iframe 会被安全头拦截;
- 在不修改 nginx 安全头的前提下,**方案 A(同窗口导航)**为可行方案。
改造点:
- `frontend-h5/src/components/chat/ApprovalCardModal.vue``handleSelect` 中,
两处的 `window.open(url, '_blank')` 全部改为 `window.location.href = url`
- 移除跳转后的 `showToast` 提示(页面立即导航离开,toast 不可见)。
效果:在企微 H5 webview 中点击审批卡片项,会在当前 webview 内打开审批页面,企微原生顶部返回按钮负责返回 IT 服务台。
## 关键文件清单
### 新建文档
- `docs/02-产品需求/approval_templates.json` — 结构化审批模板数据
- `docs/02-产品需求/dify_approval_system_prompt_v2.md` — Dify System Prompt 更新文本
### 代码修改(已部署)
- `backend/app/api/approval.py` — 18 个模板、12 类关键词
- `frontend-h5/src/components/chat/ApprovalCardModal.vue` — 12 类卡片 + URL 直跳 + 同窗口导航
## 验证结果
- 容器内 `/approval/templates` 返回 **18 个模板**
- 容器内 `/approval/keywords` 返回关键词映射正确
- `agent-browser` 打开 `https://itsupport.servyou.com.cn/h5/` 正常渲染登录页
- nginx 容器内 `/h5/` 返回 301,前端文件已正确部署到 `/opt/wecom-it-desk/frontend-h5/dist/`
- 生产容器:`wecom_it_backend` healthy, `wecom_it_nginx` running
## 用户下一步建议
1. ~~登录 Dify 后台粘贴 System Prompt~~ → 已完成
2. 在企微 H5 中输入类似"我要申请会议室维修"/"公共邮箱怎么开"/"资产变更"等触发审批卡片,确认点击卡片项后**在当前 webview 内跳转**到审批页面,并可用企微顶部返回按钮回到 IT 服务台。
3. 如需真正的自定义返回/关闭覆盖层(方案 B),需评估是否放宽 H5 的 COEP/CSP 安全头;这会影响安全级别,需单独决策。
4. 保留 `docs/02-产品需求/approval_templates.json` 作为后续审批流程变更的数据源。
## 文档归档
| 文档 | 更新内容 |
|------|---------|
| `docs/02-产品需求/IT智能服务台-产品需求文档PRD-v2.md` | 新增 v2.2 增量需求(P2-07~P2-11),含 12种/18流程完整表格、企微免登录结论、关联文档索引 |
| `docs/03-技术架构/IT智能服务台-系统架构设计文档v2.md` | 15.4 节从 6 模板扩展到 12种/18流程;新增 15.4.4~15.4.8 共 5 个子节(意图识别架构、前端卡片架构、导航方案选型、跨应用免登录、API端点);9.1 外部集成表新增运维平台条目;版本 +v2.2 |
| `docs/02-产品需求/approval_templates.json` | 18 个模板结构化数据(已有,无需修改) |
| `docs/02-产品需求/dify_approval_system_prompt_v2.md` | Dify System Prompt v2(已有,已发布) |
@@ -1,5 +1,61 @@
# 早班巡检自动化 - 执行记录
## 2026-07-11 09:30 执行结果
**数据来源**`docs/10-项目管理/任务说明书/IT智能服务台-项目管理主文档.md` (v2.4, 2026-07-10) + `.workbuddy/memory/2026-07-11.md`
**说明**:指定看板路径仍不存在,状态看板在主文档第四章;07-11有大量新产出未反映在看板中
### 关键发现
1. **P0阻塞2项持续未推进**#48 IP白名单收窄(阻塞≈28天,自06-13)、#81 敏感词检测(阻塞≈7天,自07-04)— 均>3天,需PM立即关注
2. **#105数据不一致持续**:已完成区+P1清单双重列出,上次巡检已指出至今未修正
3. **07-11大量产出未入看板**:百度ASR部署、BYOD功能、业务路由推荐(81/81)、复杂场景重构(81/81)、邀请按钮修复、通讯录同步Secret、Mac企微语音最终修复、Dify API Key更新
4. **进行中2项**#91 忘记密码 + #107 后端卷挂载改造(后者可能已完成,需确认)
5. **新增阻塞项**:企微可信IP白名单(errcode 48009)、Dify Prompt更新(3个功能等待)
6. **看板版本滞后**:主文档v2.4截止07-10,07-11全日产出来入看板
### 全局状态
- P0待办:3项(2项长期阻塞)
- P1待办:5项(1项#105已完成未清理
- 等决策:4项
- 进行中:2项
### PM行动项
1. 联系网络组确认代理IP段(#48阻塞28天)⚠️紧急
2. 确认敏感词库来源(#81阻塞7天)⚠️紧急
3. 从P1清单移除#105(连续2次巡检指出)
4. 企微管理后台添加可信IP 218.75.34.87
5. Dify后台更新3个PromptBYOD/业务路由/复杂场景)
6. 更新看板至v2.5,将07-11产出纳入已完成区
7. 确认#107卷挂载改造是否已完成
---
## 2026-07-10 09:30 执行结果
**数据来源**`docs/10-项目管理/任务说明书/IT智能服务台-项目管理主文档.md` (v2.0, 2026-07-10)
**说明**:指定路径 `docs/10-项目管理/05-项目状态看板/01-项目状态看板.md` 不存在,状态看板已整合至主文档第四章
### 关键发现
1. **P0阻塞2项长期未推进**#48 IP白名单收窄(阻塞≈27天,自06-13)、#81 敏感词检测(阻塞≈6天,自07-04)
2. **数据不一致**#105 同时出现在"已完成"和"P1重要"分区,应从P1移除
3. **07-10大量产出**:P0认证Bug修复5个、三端部署上线、生产热修复、访问控制部署、摇人Bug修复
4. **进行中仅1项**#91 忘记密码-企微扫码重置
5. **风险待处理6项**H-9/H-11/M-6/M-7/M-8/L-8/L-9
### 全局状态
- P0待办:3项(2项延后阻塞,1项待启动)
- P1待办:4项
- 等决策:3项
- 进行中:1项
### PM行动项
1. 联系网络组确认代理IP段(#48阻塞27天
2. 确认敏感词库来源(#81阻塞6天
3. 从P1清单移除#105(已完成)
4. 更新任务说明书中看板路径引用
---
## 2026-07-04 09:30 执行结果
**数据来源**`.taskboard-cache/任务执行状态看板_cache.json`(缓存时间 2026-07-03T08:44:12
@@ -0,0 +1,34 @@
# 项目任务检索 - 自动化执行记录
## 2026-07-06 配置变更
### 16:24:19
- **用户请求**:改为单次执行 + 内部循环
- **修改内容**
- scheduleType: recurring → once
- scheduledAt: 2026-07-06T17:00:00
- prompt: 增加内部循环逻辑(12次,约24小时)
- **循环逻辑**
- 首次执行立即检查任务状态
- 无新任务则静默等待2小时
- 有新任务立即汇报
- 12次循环后自动退出
---
## 2026-07-06 执行摘要
### 执行时间
- 10:29:02 (首次执行)
### 执行结果
1. 读取项目状态看板:发现1个进行中任务(#90 坐席/管理端直接登录)
2. 读取任务说明书:确认任务详情
3. 任务 #90 已完成部署测试,仅剩 Code Review
### 用户操作
- 用户要求将检索周期从1小时改为2小时
- 已更新 rrule: FREQ=HOURLY;INTERVAL=2
### 下次执行
- 12:30:00 左右 (每2小时执行一次)
+60 -106
View File
@@ -1,123 +1,77 @@
# IT智能服务台 - 项目记忆
## 锁定的设计决策
- **AI交互原则**:小段多回合交互,禁止一次性大段回复
- **文档管理**:统一保存 `docs/` 目录,按类型分子目录
- **资源申请流程**:所有资源申请→`docs/资源申请清单.md`
- **原型已锁定**:坐席v5.3 + H5 v1.1
- **UI偏好**:企微浅色扁平风格,accent=#07C160
- **术语统一**"人工"=用户呼叫坐席;"摇人"=坐席呼叫坐席
- **双企微应用**:正式(itsupport.servyou.com.cn) + 测试(已下线)
- **统一入口架构**`/itportal/` 角色选择 → user/agent/admin
- **OTP双因素认证**:admin角色访问时验证
## 设计决策(锁定)
- AI交互:小段多回合;术语:"人工"=用户呼叫坐席,"摇人"=坐席呼叫坐席
- 原型:坐席v5.3 + H5 v1.1UI:企微浅色扁平,accent=#07C160
- 统一入口 `/itportal/` → user/agent/adminadmin需OTP
## 技术架构
- **前端**:坐席(Vue3+Element Plus) / H5(Vue3+Vant4) / 管理后台(Vue3+Element+Tailwind)
- **后端**FastAPI + SQLAlchemy + PostgreSQL + Redis
- **本地开发**Python 3.12 venv + SQLite
- **字段映射**:后端`id`/`sender_type` → H5前端`message_id`/`message_type`,映射层在 `frontend-h5/src/api/conversation.ts``mapMessage()`
- **WS广播**H5发消息后通过 `ws_manager.broadcast()` 实时推送给坐席
- **API超时**:默认20s,消息发送30s,文件上传60s
- 前端:坐席(Vue3+Element Plus) / H5(Vue3+Vant4) / 管理后台(Vue3+Element+Tailwind)
- 后端FastAPI + SQLAlchemy + PostgreSQL + Redis(代码在 `app/`
- 字段映射:后端`id`/`sender_type` → 前端`message_id`/`message_type``conversation.ts``mapMessage()`
- WS双连接池:`active_connections`(agent) + `employee_connections`(H5)
## 部署
- **NAS测试**~~itdesk.amanzac.com~~ (已下线)
- **正式服务器**itsupport.servyou.com.cn (10.90.5.110)
- **堡垒机**sxn@10.212.189.210:2222 (OTP)
- **文件上传**:只能通过堡垒机手动上传到 `/tmp/`
- 正式服务器:itsupport.servyou.com.cn (10.90.5.110),出口IP `218.75.34.87`
- 堡垒机:sxn@10.212.189.210:2222 (OTP),脚本 `C:\Users\simon\.workbuddy\skills\jumpserver-ops\scripts\jms_ops.py`
- 后端卷挂载:`./app:/app/app``.py`变更→`docker compose restart backend`env变更→`up -d backend`
- 前端:rm旧→tar解压dist/→`restart nginx`Nginx: H5→`/html/h5` / Agent→`/html/itagent` / Admin→`/html/itadmin`
- Docker bind mount铁律:rm后重建必须重启容器
- 部署工具:`jms_ops.py pack-upload <local_dir> <remote_dir>`(≥100KB用此)
- httpx.Timeout须含default`httpx.Timeout(timeout=30.0, connect=10.0, read=30.0)`
## 外部系统集成
- **火绒企业版**:HMAC-SHA1认证,核心接口 `_leak`(高危漏洞) / `_virus_events`(病毒事件)
- **联软LV7000**:三层认证,核心价值 `strusername` 字段=员工→终端映射
- **Dify**:生产 `http://yw-dify.dc.servyou-it.com/dify2openai/`
- **RAGFlow**:生产 `http://10.80.0.85:8080/` / API `:9380`
- **aTrust**HMAC-SHA256,待获取API密钥
- **映射策略**:联软(主) > aTrust(VPN辅) > eHR(静态)
## 外部集成
- 企微通讯录:Secret `BM6iosc3gKnPqkEXmsQN3ErJUpfO-whfMUN646eezB8`Redis key=`wecom:contact_access_token`
- Dify`http://yw-dify.dc.servyou-it.com/v1/chat-messages`;审批意图Key `app-7jkRkAzvX4QM9v9SM3P8mMEO`
- RAGFlow:生产 `http://10.80.0.85:8080/` / API `:9380`
- 映射策略:联软(主) > aTrust(VPN) > eHR(静态)
## 管理后台
- 路由前缀 `/api/admin/`;权限 require_admin
- 已实现:仪表盘/功能开关/坐席管理/分配模式/快速回复审核/集成配置/会话监控/会话审计/坐席绩效/系统日志/角色管理
- 集成三种配置模式:url_key / access_key / account_password
## 群聊系统
- 摇人(`collaborating_agent_ids`) / 邀请(`participants`);四角色权限
- 参与者展开/缩略双模式;头像代理 `/api/avatar/proxy` 解决 COEP/CSP
## H5端消息推送
- 双通道:企微消息(必达) + WebSocket(即时)
- WS端点:`/ws/h5/{employee_id}?token=xxx`
- 降级策略:WS断连→3秒轮询
- **本地消息缓存 (v0.7.4+)**
- 登录后优先加载本地缓存消息,立即显示历史记录
- 同时异步从后端获取最新消息,合并去重后更新缓存
- 缓存key`h5_messages_cache`,有效期7天,最多100条/会话
- 发送消息和轮询时自动更新缓存
- 登出时清除缓存
## 审批流程系统(2026-07-10上线)
- 12种审批类型 / 18个流程;意图识别三级链路:关键词→Dify→降级
- 卡片导航用 `window.location.href`(同窗口)
## 近期问题修复 (2026-07)
- **OAuth重定向计数残留**:页面刷新后`oauth_redirect_count`未重置,导致误报"登录状态异常" → 在`employee.ts` store初始化时检测有效token后自动清除计数
- **API响应解析错误**:Axios拦截器返回`{code:0, data:{}, message}`包装格式,但部分API直接访问`response.xxx`而非`response.data.xxx` → 修正`conversation.ts``sendMessage`函数的响应映射
- **数据库缺失列**`messages`表缺少`is_recalled`列 → `ALTER TABLE messages ADD COLUMN IF NOT EXISTS is_recalled BOOLEAN DEFAULT FALSE;`
- **数据库列类型错误**`messages.id`列为uuid类型但代码传入varchar → `ALTER TABLE messages ALTER COLUMN id TYPE character varying(36);`
- **Nginx部署目录**:构建产物上传到`/opt/wecom-it-desk/frontend-h5/`但nginx挂载在`/opt/wecom-it-desk/html/itdesk/` → 部署时需复制文件到正确目录
## 代办事项真实数据源集成(2026-07-11部署+修复完成)
- **PRD**`docs/02-产品需求/prd_todo_integration.md`
- **后端**`todo_source_service.py` / `itsm_service.py` / `todo_aggregator_service.py`(Redis缓存45s)
- **前端**`TodoPanel.vue` / `todo.ts`(API+Store)
- **企微审批API**`getapprovalinfo`(旧`getapprovaldata`已废弃404)→ Semaphore(10)并发`getapprovaldetail` → 代码层过滤template_id
- **Token方案**:统一用 `TokenManager`(IT支持应用Secret,IP已在白名单)
- **缓存策略**:初始+60s自动=用缓存(无_force) / 手动🔄=跳过缓存(_force=1) / TTL=45s
- **8个Bug修复链**env未注入→Redis密码→bind mount丢失→API废弃→token decode→IP白名单60020→filter参数301025→**_extract_current_approver字段名全错**
- **企微API实际字段名**(dump确认):`sp_record[].sp_status`(非status/ `details[].approver.userid`(非approver[].userid
- **验证**:sxn名下2条审批单正确返回(IT资产外修申请)
- **ITSM**:工单详情API已实现,代办列表API待抓包;签名 app_id+app_secret+SHA1
- **测试**40/40通过
## 五阶段演进
1. MVP:转人工+H5+坐席+邀请+管理后台
2. 完整流程:WS+排队+满意度+OAuth2
3. AI Wingman+排查流程图
4. 知识库+数据看板
5. 自动化闭环
## IT资产升级审批推送(待部署)
- 模板ID`Bs7ucTGsPuFhxfk8pn8EydxrWxkVetB4JR8Pb6PHS`
- 新建 `asset_service.py`;修改 `approval.py`(+urge端点) / `config.py`(+asset_excel_path)
- 资产Excel12月度sheet,编码列(2)匹配,日期列(41)算年限
## 堡垒机运维 (jumpserver-ops)
## 语音识别转文字(2026-07-11部署)
- 手机企微=JS-SDK / PC企微=百度ASR(AppID=123947532) / Mac=隐藏
- H5内联录音:🎤→⏹→⏳(disabled)
**脚本位置**`C:\Users\simon\.workbuddy\skills\jumpserver-ops\scripts\jms_ops.py`
## 坐席端截图+拍照(2026-07-11部署)
- 截图编辑器(马赛克/文字/箭头/矩形/撤销);拍照(getUserMedia→兜底input capture)
- 铁律:`.selection-box`必须`pointer-events:none`;文字工具CSS类切换非v-if`getDisplayMedia()`必须同步调用
### ⚠️ 服务器操作规则(重要
## 复杂场景重构(2026-07-11部署
- P0~P3:任务中断恢复/信息更正/上下文压缩/多轮纠错
- 路由前缀`/itportal/automation/`;迁移链修复041→028_merge_heads
**在对服务器进行任何操作时,优先使用 jumpserver-ops 自动完成,而非让用户手动操作。**
## 知识库迭代(待确认)
- 技术方案:`docs/03-技术架构/增量设计-知识库迭代与痛点缓解-20260711.md`
- 原型图:`docs/01-产品设计/知识库迭代-未实现功能原型设计-20260711.md`
| 操作类型 | 自动执行方式 |
|----------|-------------|
| 远程命令 | `python jms_ops.py exec -c "命令"` |
| 文件上传 | `python jms_ops.py upload 本地文件 /tmp/远程路径` |
| 文件下载 | `python jms_ops.py download /tmp/远程文件 ./本地路径` |
## 近期修复 (2026-07)
- H5非企微环境→扫码登录页;Vue版本不一致白屏→重装+`ElMessage._context`
- 消息重复/头像COEP/OAuth残留→已修
### 使用方式
```bash
# 第一次执行(自动登录并缓存会话)
python jms_ops.py exec -c "hostname"
# 连续测试:使用 --reuse 复用会话(30分钟内有效,2-3秒执行)
python jms_ops.py exec -c "uptime" --reuse
python jms_ops.py exec -c "docker ps" -c "curl -s http://localhost/api/health" --reuse
# 文件上传(自动根据大小选择方式)
# - ≤10MB: base64 编码传输(快速)
# - >10MB: elFinder Web UI(浏览器自动化)
python jms_ops.py upload local_file.txt /tmp/remote_file.txt
# 文件下载
python jms_ops.py download /tmp/remote_file.txt local_file.txt
# 批量命令
python jms_ops.py batch -f commands.txt
# 文件传输
python jms_ops.py upload local.conf /tmp/remote.conf
python jms_ops.py download /remote/path ./local.conf
```
### 性能
| 场景 | 首次执行 | --reuse 复用 |
|------|----------|--------------|
| 单命令 | ~13s | ~2s |
| 3 条命令 | ~13s | ~3s |
### 关键参数
- `--reuse`:复用上次会话(减少登录次数,30分钟有效)
- `--parallel`:并行模式(每命令独立 token+会话)
- `--cmd-timeout`:每命令超时秒数(默认 15s
## 文档关联修复 (2026-07-05)
- **起因**2026-07-04 docs/ 重组为数字编号子目录(01-项目总览~11-历史归档),但 mkdocs.yml nav / 文档间交叉引用 / 巡检自动化路径未同步,全面断链
- **修复**mkdocs.yml nav 9处断链重写(移除2个归档项,纳入5份新文档)+ 11处交叉引用修复 + 索引版本号修正(v1.0→v1.3) + 巡检自动化适配
- **关键发现**:巡检 automation-1782986180887 原依赖的"小组任务书/任务执行状态看板.md"及A/B/C三组体系(认证加固16/消息系统16/AI数据19)从未创建,每日巡检必然失败;已适配为基于 01-项目状态看板.md 的状态巡检(P0/P1/等决策/进行中)
- **修复报告**:docs/01-项目总览/文档关联修复报告-20260705.md
- **保留未改**:目录树展示(历史快照)、归档文档内旧路径、历史任务标题
## 运维工具
- SOP`docs/10-项目管理/IT智能服务台-标准作业流程SOP.md`
- 故障排查:`docs/09-部署运维/00-标准故障排查手册.md`
+296
View File
@@ -0,0 +1,296 @@
---
name: task-intake
description: 任务接收与路由技能 - 收到任何请求时首先使用,将请求结构化为四要素(是什么/要什么/怎么做/谁来做)并路由到正确的工作流。适用于项目所有 incoming 请求的统一入口。
agent_created: true
version: 1.4
date: 2026-07-10
---
# Task Intake — 任务接收与路由
## 定位
项目所有 incoming 请求的**统一入口**。不是执行者,是路由器。
收到请求后,本技能负责:
1. **分类** — 判断请求属于哪类任务
2. **结构化** — 输出四要素(是什么/要什么/怎么做/谁来做)
3. **路由** — 对照 SOP 路由表,确定执行路径
4. **移交** — 将路由卡交给对应执行方
**核心原则**task-intake 只做"想清楚"和"分对路",不做"动手干"。
---
## 触发条件
- ✅ 收到任何新需求/问题/任务时
- ✅ 不确定该走什么工作流时
- ✅ 请求类型模糊,需要先分类时
- ❌ 已经明确知道走哪条流程时(直接执行即可,不必再过一遍 intake)
---
## 执行流程
### Step 1: 请求分类
分析请求内容,判断属于以下哪一类:
| 分类 | 识别特征 | 示例 |
|------|---------|------|
| 🏗️ 新功能开发(中大型) | 多页面/多模块、涉及后端+前端、>10个源文件 | "开发员工自助查询平台" |
| ⚡ 新功能开发(小型) | 单页面/工具脚本、≤10个源文件 | "加一个满意度评价导出功能" |
| 🔧 Bug 修复 | 报告明确 Bug,非新功能 | "管理后台登录报网络连接失败" |
| 🚀 部署运维 | 部署/配置/Nginx/容器相关 | "部署管理后台前端到生产" |
| 🩺 故障排查 | 页面打不开/502/500/接口无响应 | "H5扫码登录后页面不关闭" |
| 🔴 应急事件 | P0/P1 级别,需立即响应 | "鉴权漏洞被利用" |
| 🔍 代码调试 | 代码逻辑不对、行为异常 | "摇人消息没有推送到通知栏" |
| 📊 技术评估/决策 | 需要判断值不值得做、怎么选 | "联软API对接值不值得做?" |
| 📋 方案调研 | 需要调研后输出方案 | "火绒API方案怎么设计?" |
| 📝 文档更新 | 更新文档/SOP/手册 | "更新故障排查手册" |
| 🛠️ 工具沉淀 | 排查后归档脚本/工具 | "把排查脚本归到工具箱" |
### Step 2: 四要素结构化
对每个请求输出以下四要素:
```
是什么:[任务分类] + [一句话描述]
要什么:[期望产出物] + [验收标准]
怎么做:[执行路径] + [需要的技能/工具]
谁来做:[执行角色] + [协作方]
```
**注意事项**
- "是什么"要精确到分类表中的具体类别
- "要什么"必须包含可验证的产出物和验收标准,验收标准需指明验证手段(见下方验证手段分层表)
- "怎么做"指出执行路径和工具,但不展开执行细节
- "谁来做"明确执行方和协作方
**验证手段分层表**(用于"要什么"字段的验收标准):
| 验证类型 | 工具 | 适用场景 | 何时必须用 |
|---------|------|---------|-----------|
| API/后端 | curl / HTTP 请求 | 接口返回值、状态码 | 后端接口验证 |
| 前端渲染/登录/交互 | **agent-browser** 技能 | 页面渲染、表单填写、按钮点击、键盘输入 | 涉及前端页面的修复 **必须**用 |
| 前端诊断(F12 等效) | **agent-browser** Debug 命令 | 白屏、JS 不执行、API 异常、CSP 违规 | 前端异常排查 **必须**采集 console/errors/network |
| 服务器状态 | jumpserver-ops | 容器状态、进程 | 部署后健康检查 |
**硬规则**:禁止只因 `docker logs` 无报错就断言修复。前端类修复必须 agent-browser 截图取证。前端异常排查必须采集 `errors` + `console` + `network requests`
### Step 3: 路由决策
对照项目 SOP 路由表,确定执行路径:
| 输入特征 | 路由到 | 产出物 | 执行方 | 参考文档 |
|---------|--------|--------|--------|---------|
| 🏗️ 新功能(中大型) | 软件团队标准 SOP | PRD+架构+代码+测试 | PM→Architect→Engineer→QA | 软件团队 SOP |
| ⚡ 新功能(小型) | 软件团队快速模式 | 代码+测试 | Engineer→QA | 软件团队 SOP |
| 🔧 Bug 修复 | SOP §6 BugFix | 修复+验证 | Engineer→QA | SOP §6 |
| 🚀 部署运维 | 直接执行 ⚠️ 前置检查 | 部署完成+验证 | AI+jumpserver-ops | SOP §7 工具箱 + deploy-troubleshoot Step -1 |
| 🩺 故障排查 | deploy-troubleshoot | 定位+修复+案例 | 三步隔离法 | 故障排查手册 |
| 🔴 应急事件 | SOP §4 应急响应 | 止血+根因 | 应急流程 | SOP §4 |
| 🔍 代码调试 | diagnose 技能 | 根因+回归 | 六阶段调试 | diagnose SKILL.md |
| 📊 技术评估 | Plan 模式 | 评估报告 | AI+人 | — |
| 📋 方案调研 | Plan 模式 | 方案文档 | AI+人 | — |
| 📝 文档更新 | 直接执行 | 文档 | AI | SOP §5 文档规范 |
| 🛠️ 工具沉淀 | SOP §7 流程 | 工具归档+README更新 | AI | SOP §7 |
**路由优先级**(当请求可能匹配多个分类时):
1. 🔴 应急事件 > 一切(先止血再说)
2. 🩺 故障排查 > 🔧 Bug 修复(先隔离定位再修 Bug)
3. 🏗️/⚡ 新功能 > 📊 技术评估(明确要做的不需要评估)
4. 📝 文档更新 / 🛠️ 工具沉淀 通常作为其他任务的收尾步骤
### Step 3.1: 部署运维前置检查(⚠️ 涉及后端代码变更时必须执行)
当路由到「🚀 部署运维」且涉及后端代码变更时,**在执行部署前必须检查**:
#### ⛔ 硬规则:后端代码部署方式(方案 C 卷挂载,2026-07-10 上线)
| 变更类型 | 部署命令 | 禁止操作 | 耗时 |
|---------|---------|---------|------|
| `.py` 文件变更(新增/修改) | `docker compose restart backend` | ❌ `docker compose build` | ~15-30 秒 |
| `requirements.txt` 变更 | `docker compose build backend && docker compose up -d backend` | — | ~60-90 秒 |
| 配置文件变更(`.env`/`docker-compose.yml` | `docker compose up -d backend` | — | ~10 秒 |
> **原理**:代码通过 `./app:/app/app` volume 挂载到容器,不烘焙进镜像。改代码只需 restart 让 uvicorn 重新加载,无需重建镜像。`docker compose build` 只在 Python 依赖(requirements.txt)变化时才需要。
| 检查项 | 命令 | 不通过时的动作 |
|--------|------|---------------|
| 代码目录完整性 | `for f in app/__init__.py app/main.py app/api/auth.py; do [ -f "/opt/wecom-it-desk/$f" ] && echo "PASS: $f" || echo "FAIL: $f"; done` | 上传缺失文件到 `/opt/wecom-it-desk/app/` |
| Volume 挂载验证 | `docker exec wecom_it_backend ls /app/app/main.py` | 检查 docker-compose.yml 是否含 `./app:/app/app` 卷挂载 |
| 代码一致性 | `HOST=$(md5sum /opt/wecom-it-desk/app/main.py \| awk '{print $1}') && CONTAINER=$(docker exec wecom_it_backend md5sum /app/app/main.py \| awk '{print $1}') && [ "$HOST" = "$CONTAINER" ] && echo PASS \| echo FAIL` | `docker compose restart backend` 重新加载代码 |
> **方案 C(卷挂载)已于 2026-07-10 上线**:代码不再烘焙进 Docker 镜像,通过 `./app:/app/app` volume 挂载。`backend/app/` 旧代码目录已删除。代码更新只需 `docker compose restart`,仅 `requirements.txt` 变化时才需 `docker compose build`。
>
> **完整检查清单**见 `deploy-troubleshoot` 技能 Step -1 和故障排查手册 §1.4。
### Step 4: 输出路由卡
```markdown
## 任务路由卡
**是什么**: [任务分类] [一句话描述]
**要什么**: [产出物] [验收标准]
**怎么做**: [执行路径] [技能/工具]
**谁来做**: [执行角色] [协作方]
**路由到**: [工作流名称]
**预计阶段**: [阶段列表]
**参考文档**: [SOP章节/技能/手册]
```
路由卡输出后,**立即移交**给对应执行方,不在此步骤中展开执行。
---
## 与软件团队 SOP 的集成
当齐活林(交付总监)收到请求时:
```
请求到达
齐活林调用 task-intake
输出路由卡
├─ 路由到"标准SOP" → TeamCreate → PM → Architect → Engineer → QA
├─ 路由到"快速模式" → TeamCreate → Engineer → QA
├─ 路由到"BugFix" → TeamCreate → Engineer → QA
├─ 路由到"故障排查" → deploy-troubleshoot → jumpserver-ops(传输)
├─ 路由到"应急响应" → SOP §4 应急流程
├─ 路由到"Plan模式" → 先想后做,输出评估/方案文档
└─ 路由到"直接执行" → 文档更新/工具沉淀
```
**关键**task-intake 是齐活林判断工作流类型的**结构化工具**,替代原来的"凭经验判断"。判断结果可追溯、可复盘。
---
## 与其他技能的关系
```
task-intake (路由器)
/ | | \
/ | | \
deploy-troubleshoot diagnose 软件团队SOP Plan模式
(故障排查方法论) (代码调试) (开发流程) (评估决策)
| | |
jumpserver-ops Bash/Read Engineer/QA
(传输代理) (执行工具) (执行角色)
|
toolbox/
(弹药库)
```
- **task-intake** = 路由器,决定走哪条路
- **deploy-troubleshoot / diagnose** = 方法论,指导怎么排查
- **jumpserver-ops** = 传输代理,解决"怎么到服务器"
- **toolbox/** = 弹药库,提供辅助工具
- **软件团队 SOP** = 开发流程,指导代码实现
- **Plan 模式** = 思考模式,用于评估/决策类任务
---
## 使用示例
### 示例 1: "帮我加一个满意度评价导出功能"
```markdown
## 任务路由卡
**是什么**: ⚡ 新功能开发(小型)— 满意度评价数据导出为 Excel
**要什么**: 导出功能代码 + QA 验证通过
**怎么做**: 软件团队快速模式 → Engineer 实现 → QA 验证
**谁来做**: 寇豆码(工程师) → 严过关(QA)
**路由到**: 软件团队快速模式
**预计阶段**: TeamCreate → Engineer → QA
**参考文档**: 软件团队 SOP
```
### 示例 2: "管理后台登录报网络连接失败"
```markdown
## 任务路由卡
**是什么**: 🩺 故障排查 — 管理后台登录接口无响应
**要什么**: 故障定位 + 修复 + 验证证据(curl 接口返回 + agent-browser 登录截图)
**怎么做**: deploy-troubleshoot 三步隔离法 → jumpserver-ops 传输
**谁来做**: AI(排查) + jumpserver-ops(传输)
**路由到**: deploy-troubleshoot
**预计阶段**: Step 0(响应头) → 三步隔离 → 修复 → 验证
**参考文档**: 00-标准故障排查手册.md
```
### 示例 3: "联软 API 对接值不值得做?"
```markdown
## 任务路由卡
**是什么**: 📊 技术评估 — 联软 API 对接的成本收益分析
**要什么**: 评估报告(技术可行性 + 成本 + 收益 + 风险 + 建议)
**怎么做**: Plan 模式 → 调研 → 分析 → 输出报告
**谁来做**: AI(调研分析) + 宋献(决策)
**路由到**: Plan 模式
**预计阶段**: 调研 → 分析 → 输出评估报告 → 人工决策
**参考文档**: 无(Plan 模式自由发挥)
```
### 示例 4: "H5 扫码登录后页面不自动关闭"
```markdown
## 任务路由卡
**是什么**: 🔧 Bug 修复 — 扫码登录成功页 JS 未执行
**要什么**: Bug 定位 + 修复 + 回归验证(agent-browser 打开扫码页 → 截图确认 JS 执行 + 页面自动关闭)
**怎么做**: 先 deploy-troubleshoot 排查(确认是否部署层问题)→ 如是代码层则 diagnose 调试
**谁来做**: AI(排查) → Engineer(修复) → QA(验证)
**路由到**: 先故障排查,确认层级后转 BugFix
**预计阶段**: 隔离定位 → 根因分析 → 修复 → 验证 → 案例沉淀
**参考文档**: 00-标准故障排查手册.md + SOP §6 BugFix
```
### 示例 5: "把排查脚本归到工具箱"
```markdown
## 任务路由卡
**是什么**: 🛠️ 工具沉淀 — 排查过程产生的脚本归档
**要什么**: 脚本归位 + README 更新 + 根目录清理
**怎么做**: SOP §7 工具沉淀流程(评估→归档→登记→清理)
**谁来做**: AI
**路由到**: 直接执行(SOP §7
**预计阶段**: 评估复用价值 → 归档 → 登记README → 清理
**参考文档**: SOP §7 部署运维工具箱管理
```
---
## 上下文隔离原则
task-intake 的路由卡**只传递结论,不传递思考过程**:
- ✅ 传递:"故障定位在 Nginx 层,证据是 curl 返回 403"
- ❌ 不传递:"我一开始以为是后端的问题,试了 A/B/C 都不对,后来才发现..."
这确保下一阶段(如 diagnose 或 Engineer)拿到的是**干净的输入**,不会被前一阶段的假设和试错过程带偏。
---
## 版本历史
| 版本 | 日期 | 变更 |
|------|------|------|
| v1.0 | 2026-07-10 | 初始版本,含 11 类任务分类 + 路由表 + 5 个示例 |
| v1.1 | 2026-07-10 | 新增验证手段分层表,示例补充 agent-browser 验证要求 |
| v1.2 | 2026-07-10 | 验证手段分层表新增"前端诊断(F12 等效)"类型,硬规则增加 console/errors/network 采集要求 |
| v1.3 | 2026-07-10 | 新增 Step 3.1 部署运维前置检查(代码同步 + 依赖同步),防止镜像缺文件 |
| v1.4 | 2026-07-10 | 方案 C 上线:Step 3.1 更新为 volume 挂载验证(代码完整性+挂载状态+一致性检查) |