Skip to content

Latest commit

 

History

History
64 lines (46 loc) · 4.58 KB

File metadata and controls

64 lines (46 loc) · 4.58 KB

v0.11.7:图文会话——截屏导入 + 跨链路采集体验同步

状态:代码已交付(2026-08-22,T1-T7 全链路 + 六维审查 8 项即修闭环;真机验收待执行) 依据:设计 spec([ ] 已归档)· 实现计划([ ] 已归档) 前置:v0.11.6(AI 平台化)交付后开工

一句话

课堂助手新增第三采集动线「图文采集」——连续框选截屏组成图文会话(无音频),补齐网页/PDF/图文教程等图文场景的知识采集空白;同步两项采集体验改进到视频导入。

范围

# 需求 落点
1 图文内容可采集为会话 截屏导入(全屏快照 → 框选 → 截图落库 + OCR)→ kind=photo 图文会话;会话列表/详情/转笔记全链路可用
2 会话类型可区分 sessions.kind 字段(NULL=视频类零回归,photo=图文);列表徽标 + 详情空态适配
3 跨链路采集体验同步 视频导入完成后「去会话页」直达按钮;OCR 进度消息携带累计识别块数
4 健壮性 图文/实时采集互斥;崩溃残留 24h 清扫;零截图不留空壳;OCR 失败不阻断截图

交付内容

M1 · 数据模型 + 后端链路

  • sessions.kind 列(建表 + ensure_column 幂等迁移);Rust/前端类型穿透
  • 5 命令:start_photo_session / capture_screen_snapshot / save_photo_capture / finish_photo_session / discard_photo_session
  • photo_capture.rs 业务编排:base64 解码校验 → SessionImageStore.save_frame(双指纹去重)→ 全图 OCR(960px 口径,bbox 反算)→ OCR 块落库 → 识别预览返回
  • 互斥注册(AppState.photo_session)+ 残留清扫(列表加载时 24h 超时 photo recording → failed)

M2 · 前端交互

  • PhotoCapturePanel(课堂助手左栏三态面板:开始/截屏/完成 + 最近截图缩略图 + 识别反馈 + 去会话页直达)
  • ScreenSelectOverlay(全屏框选遮罩:letterbox 缩放 + 物理像素坐标换算 + canvas PNG 裁剪)
  • 会话列表「📷 图文」徽标;会话详情空转写空态
  • VideoImportPanel 直达按钮 + 导入 OCR 进度增强

M3 · 验证与收尾

  • Rust 测试 7 组(端到端/零截图/互斥/清扫/filter_note 空 segments/迁移/重复截图)+ 前端状态机与坐标换算测试
  • 文档:ADR(会话类型字段)+ 本版本文档 + 系列总览 + README 索引 + CHANGELOG
  • 全量回归:cargo test / clippy / tsc / vitest

关键决策与纪律

  • kind 字段而非派生:会话类型是领域语义,列表徽标/详情空态/清扫都需要——派生判断(如无 segments)脆弱且不可靠
  • 前端 canvas 裁剪而非后端:命令无状态,两次调用间无法保持帧缓存;canvas 裁剪与 base64 通道均有项目先例
  • 截图不过 UI 垃圾黑名单:用户显式框选的内容即意图(与自动采帧链路不同)
  • 三链路 OCR 口径统一:960px 缩放 + bbox 反算 + score≥0.5(实时/导入已具备,图文遵循)
  • 互斥:图文采集与实时捕获共享屏幕内容动线,避免状态混乱
  • PNG 无损裁剪:快照显示用 JPEG 省流量、裁剪图 PNG 无损(OCR 友好)
  • YAGNI:单张删除/内容类型标注/OCR 编辑/真实全屏窗口/图文音频——不纳入本期

验收标准

  1. 课堂助手可开始图文采集 → 连续框选截屏 ≥2 张 → 每张立即显示识别块数与文本预览 → 完成采集后会话出现在会话列表(📷 图文徽标)
  2. 图文会话详情页:无讲述内容空态 + 屏卡流完整(标题/正文/配图/标签);可一键转笔记(纯 OCR 画面要点)
  3. 视频导入完成后有「去会话页」直达按钮;导入 OCR 进度显示累计识别块数
  4. 实时捕获进行中无法开始图文采集(原因可见);图文采集中无法开始实时捕获
  5. 零截图完成采集 → 不留空壳会话;人为制造超 24h recording 图文会话 → 列表加载被清扫为 failed
  6. 全量回归通过(cargo test / clippy / vitest / tsc)

关联

  • 设计 spec([ ] 已归档)· 实现计划([ ] 已归档)· v0.11 系列总览 ·
  • 复用资产:capture/gdi_capture.rs · image_store.rs · import_frame.rs(960px 口径)· screens.rs(屏卡聚类)· BoxSelectOverlay.tsx(框选范式)