Files
mnote/design/implementation_checklist.md
T
2025-12-06 16:47:17 +08:00

138 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
```markdown
# MNOTE v3.0 未完成项计划与检查清单(截至 2025-12-02
> 本清单聚焦 design3.0.md 中仍未落地的要点,按依赖顺序排列。勾选项即完成,可作为阶段验收依据。
## 阶段性计划
1. **后端基础补全**:补建数据库表、打通 MinerU OCR 流程。
2. **LightRAG 全链路**:实现增量索引与 `/api/v1/chat` 流式回答。
3. **思维导图增强**:在 simple-mind-map 基础上补齐双向同步与导出。
4. **实时协作与任务反馈**:用 Supabase Realtime 推送 background_tasks 进度、完善媒体/PDF OCR API。
5. **表格后端化**:按照 design3.0 P1/P2 要求提供 FastAPI CRUD,以承载 Luckysheet 协同。
## 详细 Checklist
- [x] **背景任务表迁移**
-`supabase/migrations` 中新增 `background_tasks` 表及 RLS、索引、触发器,与 design3.0.md 第 3 节保持一致。
- 验证 `task_tracker` 读写正常(POST/GET `/api/v1/tasks/*`)。
- [x] **MinerU OCR 管线**
- `app/workers/tasks.py` 真正串联 MinerU:下载 Supabase Storage 文件 → 调用 `services/mineru` → 写入 `documents.content/raw_text/index_status`
- `/api/v1/tasks/ocr` 支持真实参数(signed URL、document_id),并返回 Celery track_id。
- `DocumentTaskPanel` 将示例 URL 改为真实 Storage URL,增加失败提示。
- [x] **媒体 OCR API 对齐**
- FastAPI 新增 `/api/v1/tasks/media-ocr`,与前端 `/api/media/ocr` 对接。
- 统一 media_assets.ocr_status / ocr_payload 写入逻辑,并复用 MinerU 输出。
- [x] **Supabase Realtime 任务推送**
- 前端订阅 `background_tasks` 频道(Supabase Channel),实时更新状态 & 提示。
- 关闭现有轮询 fallback 或保留为降级方案。
- [ ] **documents 表字段与索引对齐**
- 确认 `documents` 表已包含 `mindmap_data/raw_text/index_status` 字段与默认值,并在 `supabase/migrations` 中补齐缺失迁移。
- 补建更新触发器/索引,保证 `updated_at``index_status` 的写入由后端与 Celery 任务一致,方便 LightRAG 增量监测。
- [ ] **LightRAG 索引与聊天**
- `lightrag_service` 调用实际 LightRAG:初始化 PGVectorStore、支持 `queue_index``query`
- 保存笔记/完成 OCR 后触发增量索引;`/api/v1/chat` 以 SSE 返回引用、来源数组。
-`user_id`/workspace 作为 LightRAG namespace,保证多租户隔离,并实现 `/api/v1/lightrag/health` 自检 + `--init-index` 重建脚本。
- [ ] **Celery 队列优先级与并发治理**
- 将 OCR/索引任务放入 Redis 优先级队列,worker 默认 concurrency=3,并限制同账号并发数(避免 CPU 撑爆)。
- Celery 任务需写入 `progress/message` 字段,失败自动进入 retry/backoff,配合 Supabase Realtime 显示。
- [ ] **Supabase Auth JWT 校验与跨域策略**
- FastAPI 中使用 `supabase-py` 验证前端携带的 JWT,拉通 `user_id` 注入依赖,拒绝匿名调用。
- 统一 CORS 配置(Next.js 域名 + 桌面端自签),并在 `/api/*` 中校验 workspace 权限。
- [ ] **simple-mind-map ↔ BlockNote 双向同步**
-`KMindRenderer`/Lab 页面中监听节点改动,生成概要数据写回 `documents.mindmap_data`
- BlockNote 侧根据最新 `mindmap_data` 更新大纲/引用,支持跳转到具体 mindmap 节点。
- 实现 PNG/PDF/Markdown 导出与文档内缩略预览。
- [ ] **思维导图/笔记互跳与引用**
- PDF/引用面板可跳转 mindmap 节点(事件 `mindmap:jump-to-node`)。
- Mindmap 节点可附加 BlockNote 块链接,实现双向导航。
- [ ] **表格后端接口 & 协同**
- FastAPI 新增 `/api/v1/tables`, `/api/v1/tables/{id}/rows` CRUD,与 `document_tables`/`document_table_rows` RLS 一致。
- 前端 Luckysheet 协同使用该接口(或 Supabase Rest)写入,支持版本快照/节流。
- [ ] **BlockNote 表格块 & 预览(P3**
- Slash 命令支持“插入协同表格”,创建即落库 `document_tables` 并在 BlockNote 中插入引用块。
- 列出前 5 行 + hover 工具栏预览,支持点击跳转全屏编辑。
- [ ] **全屏 Luckysheet 编辑器(P4**
- `<FullScreenTableEditor>` 完成多选、冻结、合并单元格、条件格式、暗黑模式和在线协作者头像。
- 工具栏、快捷键与飞书表格一致,兼容 simple-mind-map 的快捷跳转。
- [ ] **表格持久化与性能(P5**
- Yjs SubDoc → Supabase 节流写入,增量 diff 仅写改动行,并定期生成 `table_versions` 快照。
- 提供 CSV/Excel 导入、虚拟滚动与断线重连恢复,验证 500×50 表格不卡顿。
- [ ] **PDF Sticky OCR 与引用**
- `/api/pdf/ocr/[assetId]` 返回的数据来自后端 MinerU(非直接读表),支持重新拉取。
- PDF 引用写回 `pdf_quotes` 表,Mindmap/PDF/BlockNote 三方共享同一引用格式。
- [ ] **文档保存 → LightRAG 自动更新**
- `DocumentContent` 提交后触发后台任务(轻量 queue)写入 LightRAG,而不仅是 Supabase。
- 失败时在 UI 中提示“索引重试”按钮。
- [ ] **实时协作共享链接与权限控制**
- 基于 Supabase Realtime Presence 实现 20 人同时编辑的游标/选择框,并测量延迟 < 800ms。
- 提供私有/工作区/公共只读分享链接,结合 `workspace_members` RLS 校验访问级别。
- [ ] **Supabase Storage 签名 URL 与服务端下载闭环**
- 前端仅生成短时 signed URLFastAPI 使用 service_role 拉取原始文件,超时自动重新签名。
- 针对桌面端上传,补充失败重传/断点续传与 Storage 目录规划(user_id/workspace/document_id)。
- [ ] **性能优化 & 自动化测试(阶段 7)**
- 前端提供 skeleton + lazy chunkBlockNote/思维导图切分 bundle,桌面端 `npm run desktop:hot` 自检指标 < 800ms。
- 后端加入速率限制、pytest + Celery 集成测试、Cypress 多人协作 E2E,并在 CI 中跑。
完成上述清单后,即可宣告 design3.0 的核心路径(OCR + LightRAG + simple-mind-map + 协同表格)满足验收标准。
```
现状速记
- 后端 OCR 流程已串好:wolai-backend/app/workers/tasks.py 中 ocr_pipeline 通过 storage_fetcher 下载签
名 URL,调用 mineru_service.extract_markdown_syncVLM 后端可配置),写回 documents.content/raw_text/
index_status 并自动投递 lightrag_index_pipeline。media_ocr_pipeline 也会更新 media_assets.ocr_status/
ocr_payload。
- 数据面同步到位:supabase/migrations/20251204_alter_documents_add_mindmap_fields.sql 补齐 mindmap_data/ raw_text/index_status 及索引/触发器,20251203_add_background_tasks.sql 完成任务表 + RLS。
- 前端任务面板已接入 Realtimewolai-frontend/src/components/document-task-panel.tsx 订阅
background_tasks 频道,可手工输入 Storage URL 触发 /api/v1/tasks/ocr,并展示 OCR/索引进度。
- 文档保存会触发索引:wolai-frontend/src/app/api/documents/save/route.ts 在保存内容时写入 raw_text/
index_status=pending,并向后端 /api/v1/lightrag/index 异步投递。
- LightRAG 壳已就绪:wolai-backend/app/services/lightrag_service.py 支持 workspace/user namespace/api/ v1/chat 提供 SSE,占位的 scripts/init_lightrag.py 可批量重建索引(未验证实链)。
主要缺口 / 风险
- LightRAG 功能未闭环:缺少前端聊天 UI(未消费 /api/v1/chat SSE),也未验证真实 LightRAG PGVector/LLM 调 用,当前 fallback 可能静默返回占位数据。
- Celery 治理不足:虽配置了优先级队列与并发=3,但未做账号级限流/去重/重试回退,进度消息较粗,失败场景
无 backoff。
- 鉴权与隔离:FastAPI 仅做 token 校验,写库全部用 service_rolesupabase_rest),缺少 workspace 成员校验 与 CORS/桌面端域名统一策略。
- 思维导图 ↔ 笔记未同步:mindmap_data 仅在导图页保存,BlockNote 无法反哺/消费导图结构,也未实现节点 ↔
BlockNote 块/引用的互跳。
- 表格后端缺失:FastAPI 无 /api/v1/tables CRUD,当前全靠 Next 路由直写 SupabaseLuckysheet 协同仅有 WS
转发,未落库增量/节流/快照。
- PDF OCR/引用链路半成品:前端 pdf-asset-viewer 读取 /api/pdf/ocr 和 pdf_quotes,但后端没有 MinerU PDF
OCR 接口,media_ocr_pipeline 仅填空 payload,无法重新拉取真 OCR。
- Storage 签名与续签:OCR 触发仍靠手填 URL,后端也未实现 service_role 下载 + 失效重签。
下一步优先级建议
1. 验证并打通 LightRAG 实链:为 PG/LLM 配好 env,跑一条索引 + /api/v1/chat 流式问答自检,补全引用数组格
式;前端落地聊天侧边栏消费 SSE。
2. 强化 Celery 任务治理:增加 per-user 并发/队列优先级策略、重试/退避、进度消息细化
pending→processing→completed/failed),并确保 Realtime 推送正确。
3. 补齐鉴权与 CORS:在 FastAPI 统一用 supabase-py 校验 JWT,所有写操作检查 workspace 成员;整理 CORS 允
许列表覆盖桌面端自签域。
4. 实现导图↔笔记双向同步:BlockNote 监听节点摘要写回 documents.mindmap_data,导图侧消费最新大纲/块链接, 增加互跳事件(block_id/mindmap node id)。
5. 表格后端化:在 FastAPI 增加 /api/v1/tables 与 /api/v1/tables/{id}/rows,对齐 document_tables/
document_table_rows RLSLuckysheet 读写走该接口并加节流/快照。
6. 完善 PDF OCR/引用链路:新增 /api/v1/tasks/pdf-ocr 或复用 media-ocr 生成带页码/rect 的 OCR payload/
api/pdf/ocr/[assetId] 回源 MinerU 结果并支持重拉。
7. Storage 签名闭环:前端生成短时 signed URL,后端负责下载/过期重签,任务触发面板改为自动选取文档关联文
件而非手填 URL。