Simon
|
969f524962
|
feat(REQ-通用-005): v1.1 选项选择持久化方案实施
参考:docs/02-技术文档/技术架构/实施报告-REQ-通用-005-v1.1.md
方案:docs/02-技术文档/技术架构/技术方案-REQ-通用-005-选项选择持久化-v1.1-正式方案.md
4 个子任务全部完成:
- T01 基础设施(BackendObserver 服务 + WS 广播)
- T02 Bug 6(conversation.ts option 状态持久化)
- T03 Bug 4(h5_ai_task.py:443 still_thinking 兜底)
- T04 Bug 5+Req 7(ChatPanel.vue collapsed 折叠 + WS 监听)
文件清单:
- 后端 API:4 文件(api/router/ws + 新增 api/backend_observer)
- 后端 service:1 文件(services/backend_observer.py)
- 后端 tasks:1 文件(h5_ai_task.py 兜底)
- 后端 tests:2 文件(test_backend_observer + test_h5_mask_option_select)
- 前端 stores:1 文件(conversation.ts 持久化 + WS 订阅)
- 前端 composables:1 文件(useH5WebSocket.ts 选项广播监听)
- 前端组件:2 文件(ChatPanel.vue 折叠 + MessageBubble.vue 状态展示)
- 前端 package.json:2 文件(agent + h5 dependencies)
- 前端 scripts:1 文件(measure-option-latency.mjs 端到端测量)
- 前端 types:1 文件(components.d.ts 声明)
合计 16 文件 + 1053 行 / - 12 行。
|
2026-08-03 18:45:46 +08:00 |
|
Simon
|
5adcb4852a
|
fix(alembic): 053 down_revision 笔误修正
down_revision 之前误写为文件名 '052_diagnostic_queue_quiz_closing',
应为 052 迁移的实际 revision id '052_diag_queue_quiz'。
影响范围:
- alembic history 直接抛 KeyError: '052_diagnostic_queue_quiz_closing'
- 任何 alembic upgrade / stamp head 操作均无法解析完整链
- 之前未被发现的根因:生产 alembic_version 长期停在 052,从未尝试解析后续链
验证(生产环境 2026-08-03 17:03 P1 治理任务):
- 修复前:alembic history → KeyError
- 修复后:052 → 053 → 054 → 055 → 056(moderation) → 057 链完整解析
- alembic stamp 057_troubleshooting_templates 已成功执行
- 数据库实际状态确认:conversations.is_archived / messages.reply_source /
quick_rules / sensitive_words / privacy_patterns / moderation_logs /
troubleshooting_templates 均已存在,迁移链与数据库一致
|
2026-08-03 18:34:41 +08:00 |
|
Simon
|
566bb46cd4
|
feat(agent): 坐席端左栏会话状态 Tab 顺序调整 + 默认显示待处理 (#134)
**改动**
- `src/frontend-agent/src/components/conversation/ConversationList.vue`
- `filterTags` 数组顺序倒置:`[全部, 待处理, 进行中, 已完成]` → `[待处理, 进行中, 已完成, 全部]`
- `activeFilter` 初始值 `'all'` → `'pending'`(坐席日常首选入口)
- `docs/07-项目管理/任务说明书/任务说明书-134-坐席端左栏会话状态Tab顺序调整+默认显示待处理.md`(新增)
**未改**
- 不动 store(`myConversations` / `colleagueConversations` / `historyConversations` 划分准确)
- 不动 `applyFilters` 逻辑(status 映射正确:pending→queued、active→serving/ai_handling、done→resolved)
- 不动 ConversationItem.vue / 样式 / backend API
- 不重命名 `activeFilter` 的 key(保持 `'pending' | 'active' | 'done' | 'all'` 后向兼容)
**部署**
- 构建:`npm run build` 6.20s 通过,新 main chunk `index-BK_U7e10.js`(旧 `index-BDGZ_gcJ.js`),Workspace chunk 唯一 `D44-5RYv.js`
- 打包:`packages/frontend-agent-dist-0803-133.tar.gz` 576,913B(25 个文件,0 累积污染)
- jumpserver-V2 全程免登录(cache 19.7h 内有效)
- 备份链:`/opt/wecom-it-desk/frontend-agent/dist.bak.0803_pre133`
**验证**
- 服务端(curl 绕用户/CDN 缓存):HTTP 200 + main JS hash 变更 + Workspace=1 + 备份存在 ✅
- 浏览器无痕模式:用户 2026-08-03 17:48 确认"显示已更新"(默认激活"待处理" + Tab 顺序倒置)✅
- v1.2 原型与实际页面 Tab 顺序一致 ✅
**任务编号修正**
- 起草时用了 #133,但该编号已被当日另一任务 `voice_asr.py POST /asr auth 加固` 占用
- 沿用 #132 后下一个空号 → 实际为 **#134**
|
2026-08-03 17:49:42 +08:00 |
|
Simon
|
a20606f328
|
fix(security): troubleshooting_templates 5 端点加 auth + MOCK 替换 ORM
P0 安全修复(连续 2 次巡检标记):
1. 5 端点全部加 auth 依赖
- GET list/detail → Depends(get_current_user)(任何已登录用户)
- POST/PUT/DELETE → Depends(require_admin)(仅 admin)
2. 进程内 MOCK_TEMPLATES → PostgreSQL troubleshooting_templates 表
- ORM model 早已注册但缺迁移 → 新建 057_troubleshooting_templates.py
- 8 套预设模板在冷启动时通过 seed_default_troubleshooting_templates 插入
- 容器重启不再丢数据
3. 5 源调用方审计通过(与 voice_asr.py P0 修复同款教训):
- H5 端 api/troubleshooting-templates.ts:只读
- Admin 端 api/troubleshooting.ts + Flowcharts.vue:5 端 CRUD 全套
- Agent 端 api/troubleshooting.ts:只读
- service_routes.py:仅注册无反向调用
- tests:无相关调用
4. 端到端验证(生产环境实测):
- GET no-auth → 403
- GET invalid-token → 401
- GET admin token → 200 + 8 items
- POST admin (sxn) → 201 + 新建 UUID
- POST 非 admin → 拒绝(业务 code 1002)
- PUT/DELETE admin → 200 + 字段更新/删除
- 容器重启后 → 8 套数据仍在(DB 持久化生效)
文件改动:
- alembic/versions/057_troubleshooting_templates.py(新建, 79 行)
- app/api/troubleshooting_templates.py(重写 720→859 行)
- app/main.py(1071→1082, +11 行 seed 调用)
相关 P1 跟进(已同步滴答清单):
- 053-056 迁移脱节(生产 alembic_version=052)
- 缺 2 索引 idx_tpl_category / idx_tpl_active
Refs: voice_asr.py P0 修复(5 来源审计教训)
|
2026-08-03 16:27:10 +08:00 |
|
Simon
|
b321e3dabd
|
chore(repo): 重组项目源码目录至 src/ 下 (#重组)
- 顶级源码目录 backend/ frontend-h5/ frontend-admin/ frontend-terminal/ frontend-agent/ 物理移动到 src/ 下
- frontend-agent/ HEAD 中原本只跟踪 dist 备份和零散配置(无业务源码),本次作为新模块首次纳入
- 强化 .gitignore: 覆盖历史 dist 备份(dist.bak/ dist_bak*/ dist-clean/ dist_old/ 等)、node_modules_old/、前端部署 bin chunk(*-part*.bin / p[0-9].bin)、src/backend/uploads/ + src/backend/media/(运行时上传)
- 备注: docs/ 目录重组(01-产品设计→01-产品文档 等)暂留 working tree,本次未入库
|
2026-08-03 15:42:28 +08:00 |
|