03 · 任务清单与真实进度
状态定义:✅ 已完成(有代码+证据)|🟡 部分完成(链路未闭环)|⬜ 未开始|⏸ 待验证|❌ 已取消/被取代
证据等级:【代码】 源码可见 |【测试】 本地测试跑过 |【部署】 线上版本已确认 |【实测】 我亲自执行并得到结果 |【未验证】 无证据
重要:tests/ 里全部是「Mock KV / Mock 模型」的契约测试,能证明逻辑分支,不能证明生产端到端可用。凡是只有【测试】没有【实测/部署】的,都不算「线上已验证」。
一、任务总表(按主题)
A. 项目奠基与前端 UI
| # |
任务 |
状态 |
证据 |
未完成/说明 |
| A1 |
基于用户源码(v6.html)产出改造版 index.html(7 个片段) |
✅ |
提交 afa0aa4 基线;文件在 /workspace/chat/index.html【代码】 |
— |
| A2 |
果冻/液态玻璃气泡、头像自定义、猫爪面板、长按菜单、消息状态、动态状态胶囊 |
✅ |
同上【代码】 |
手绘装饰版曾上线后乱码 → 回滚 |
| A3 |
IndexedDB 替换 localStorage + 真实 fetch |
✅ |
readMessages/saveMessages/idbSet【代码】 |
— |
| A4 |
收藏(本地 fav_list + AI [[fav:]] 回传) |
✅ |
parseFavorites、addFavorite【代码】 |
收藏历史只在本机(后加云端高光) |
| A5 |
全屏按钮 / PWA / 图片灯箱 / showToast |
✅ |
提交 08815a9 等【代码】 |
国内版 PWA 图标受 sharecode 影响(见 07 P2-10) |
| A6 |
外观定制(气泡颜色/透明度/磨砂、自定义皮肤九宫格、顶底栏调色、恢复默认) |
✅ |
applyAppearance、applySkinClass【代码】 |
深色模式入口已按用户要求删除 |
| A7 |
iOS 全屏与键盘适配(6 轮返工) |
✅ |
提交 43ec8d7…f02cc07;线上 51ac31d3【部署】 |
过程见 07 事件 03 |
| A8 |
输入框 16px 防聚焦缩放 + --bar-h 动态高度 |
✅ |
提交 9ed08a6;线上 0114d69f【部署】 |
— |
| A9 |
「仅本机删除」与「彻底删除(含云端)」两条路径拆分 |
✅ |
提交 d7ada29、6a09007;test_ui_delete_scope.mjs【测试】 |
历史消息无 mid 时只能本地删(旧数据限制) |
B. 后端与安全
| # |
任务 |
状态 |
证据 |
未完成/说明 |
| B1 |
Worker 后端:KV 记忆、关键词检索、时间注入、主动消息、tools 预留 |
✅ |
worker.js【代码】 |
主动消息最多 3 次/天、间隔 ≥3h |
| B2 |
安全 v2:令牌/同源/限流/SSRF/体积/脱敏/提示词边界 |
✅ |
提交链 + 46 项断言【测试】 |
令牌随页面下发未解决(P0-3) |
| B3 |
多服务商代理(OpenAI/DeepSeek/通义/自定义) |
✅ |
callModel + validateApiUrl【代码】 |
v1/v2 ALLOW_CUSTOM_API=0 → 自定义域名会被 403(P2-4) |
| B4 |
页面令牌按部署注入(修 v1 401) |
✅ |
提交 32aa8a5;v1 a3ef2a33 线上拉取验证【线上核验】 |
v1 无 AUTH_TOKEN → 用代码默认值(弱) |
| B5 |
模型 Key 服务端兜底 |
❌ |
v1 secret 叫 DEEPSEEK_API_KEY,代码只读 env.API_KEY【线上核验】 |
死配置;目前全靠前端自填 Key |
C. 任务书阶段 0–4
| # |
任务 |
状态 |
证据 |
未完成/说明 |
| C1 |
阶段 0 只读审计 |
✅ |
审计报告-阶段0.md、小手机-审计草案/【代码/文档】 |
— |
| C2 |
阶段 1 备份与基础可靠性(含 B1 误清空修复) |
✅ |
提交 08815a9【代码】 |
— |
| C3 |
阶段 2 统一标识(profile / mid / conversation / sync_status) |
✅ |
提交 e6c9661【代码】 |
— |
| C4 |
阶段 3 完整档案与同步(云端 msg: + 同步/恢复按钮) |
✅ |
提交 e6c9661【代码】 |
同步为全量上传,O(n) 写(P1-7) |
| C5 |
阶段 4 高光 / 经历 / 关系 + 记忆库面板 |
✅ |
提交 ca44bb8【代码】 |
关系不进模型上下文(设计如此) |
| C6 |
P0-1 记忆按 profile 隔离 |
✅ |
提交 9505597;test_p0_memory_isolation 15/15【测试】 |
旧 mem_* 仅 owner 只读 |
| C7 |
P0-2 稳定 mid 与引用完整性 |
✅ |
提交 513f24b;21/21【测试】 |
— |
| C8 |
P0-3 删除接口与防复活 |
🟡 |
提交 d4aa34e(软删)→ 83bc573(硬删+墓碑);36/36【测试】 |
硬删不清 mem:(P0-2) |
| C9 |
P0-4 全量导出/导入 |
✅ |
提交 2460f9a;27/27【测试】 |
前端 UI 只在「国内版」放开(P1-4) |
| C10 |
P1 记忆闭环 + 档案搜索 |
✅ |
提交 5bfe8c8;13/13 + 14/14【测试】 |
搜索无前端面板 |
D. 托管、迁移与部署
| # |
任务 |
状态 |
证据 |
未完成/说明 |
| D1 |
Git 仓库接入(GitHub 私有) |
✅ |
github.com/beibbloveme-crypto/yuai;git remote -v【代码】 |
远端实时状态【未验证】(沙箱 403) |
| D2 |
Pages 静态托管适配 |
🟡 |
提交 1ad73ae;Pages 项目 chat-ui-beib 实为 10-03 的另一原型【实测】 |
当前三端都不用 Pages |
| D3 |
全新后端重建(zhai-v2 + chat_memory_v3) |
✅ |
提交 867faee;小手机-全新后端环境说明.md【文档】 |
空库是设计,不是失败 |
| D4 |
国内直连测试版(WorkBuddy) |
✅ |
提交 0b01ef6;线上可访问【实测】 |
初版无落库,后改 SQLite |
| D5 |
C 方案第 1 批:server.js 垫片化 + SqliteKV |
✅ |
提交 4a8bdb1、e20c937【代码】 |
— |
| D6 |
C 方案第 2 批:测试套件换真 SQLite |
✅ |
提交 ef6f725;188 项断言【测试】 |
仍是契约测试,非 E2E |
| D7 |
C 方案第 3 批:双快照三层防护 + 导出补全 |
✅ |
提交 a32fe2e;13/13【测试】 |
快照与库同在 /tmp(P1-3) |
| D8 |
C 方案第 4 批:v2 → 国内版全量搬迁 606 条 |
✅ |
提交 5f61f81;国内版 counts 与逐条导入报告【实测】 |
实际构成:307 消息 + 299 记忆;其中 217 条 mid 为 local_(来自本机历史同步) |
| D9 |
国内版三连修复(WORKER_URL 污染 / sharecode 403 / 人设丢失) |
✅ |
提交 c007087、be64807、bd6a5af【代码】 |
— |
| D10 |
国内版 403 根治(可信公网基准) |
✅ |
提交 0f1007c【代码】 |
域名一变仍会 403(P1-3) |
| D11 |
三端部署同一份修复版 |
✅ |
v1 a3ef2a33、v2 8c6fe98a、国内版进程 22:26【线上核验/实测】 |
v1/v2 受 KV 配额限制,10-26 08:00 前降级 |
E. 删除语义与配额
| # |
任务 |
状态 |
证据 |
未完成/说明 |
| E1 |
「彻底删除」改物理删除 + 墓碑(v2 先行) |
✅ |
提交 83bc573;v2 65bf6ef0【部署】 |
历史 279 条软删未清理 |
| E2 |
墓碑防复活(导入四类记录前查墓碑) |
✅ |
test_p0_delete_sync 第 7/8 节【测试】 |
墓碑不参与导出 → 换库恢复会丢墓碑 |
| E3 |
修复 KV 每日 list 配额烧穿(缓存+降级+干净 503) |
✅ |
提交 5666a72;test_p0_kv_quota 17/17【测试】;v1/v2 部署【部署】 |
写配额仍紧(P2-3);检索 1000 键截断(P1-2) |
F. 记忆系统升级(任务书 5–9)
| # |
任务 |
状态 |
证据 |
说明 |
| F1 |
阶段 5 人设版本管理 |
⬜ |
无代码 |
当前人设 = localStorage 一段文本 |
| F2 |
阶段 6 批量成长分析 |
⬜ |
无代码 |
无任务队列、无证据/反例、无审核 |
| F3 |
阶段 7 后台管理 + 强认证 |
⬜ |
无代码(只有设置面板) |
任务书要求「不得只靠隐藏按钮保护」 |
| F4 |
阶段 8 沈屿本体迁移 |
⬜ |
无代码 |
当前测试角色 owner |
| F5 |
阶段 9 测试环境清理 |
⬜ |
无代码 |
测试数据仍在(见 04 数据面) |
| F6 |
记忆框架升级(Mem0 四态 / Graphiti 双时间戳 / Letta 预算) |
⬜ |
/workspace/小手机项目-全项目代码基线审查报告.md 第七部分(调研+5 条建议)【文档】 |
只出建议,未实施 |
G. 文档与交接
| # |
任务 |
状态 |
证据 |
说明 |
| G1 |
完整交付文档(源码/功能/进程/测试/交接) |
✅ |
小手机-完整交付文档.md(10-22,605 行)【文档】 |
已过期(不含 10-23 之后) |
| G2 |
模块索引(按区域改代码) |
✅ |
模块索引.md【文档】 |
行号已漂移,选择器名仍有效 |
| G3 |
安全说明 / 审计报告 / 修复记录 / 迁移方案 |
✅ |
4 份 md【文档】 |
均截至各自日期 |
| G4 |
交接档案(本次 10 个文件) |
✅ |
本目录【文档】 |
截至 2026-10-27 |
| G5 |
交接文档更新到当前基线 |
🟡 |
本档案即更新版 |
旧文档未删改(保留历史) |
二、用户明确下达但尚未完成的事
| # |
事 |
现状 |
建议 |
| 1 |
历史 279 条软删记录「真的删掉」 |
记录仍物理存在(v1 KV + 国内版 SQLite),仅带 deleted_at |
分批硬删+墓碑(≤200 条/批,跨天,注意写配额) |
| 2 |
v1 与国内版数据统一 |
两份独立副本,互不同步 |
先定「哪个是主」,再做单向同步 |
| 3 |
图片备份 |
图只在本机 IndexedDB |
决策:接受 / 上 R2 / 只备份缩略图 |
| 4 |
沈屿本体迁移(阶段 8) |
未开始 |
先补人设版本(阶段 5),否则迁移无载体 |
| 5 |
后台管理(阶段 7) |
未开始 |
与 P0-3 访问控制一起做最省事 |
三、被取消 / 被取代的任务
| 任务 |
原因 |
| 手绘气泡装饰 |
上线后乱码,回滚 |
| 深色模式 |
用户 10-17 要求删除入口 |
| 默认人设「小喵」 |
用户 10-19 要求取消,只用自定义人设 |
deploy.sh 手工改 cat-chat-all-in-one.js 后端 |
被 build.js 整体重生成取代 |
| 软的「云端删除」 |
被硬删+墓碑取代(10-25) |
| 单一 Worker 架构 |
被 v1 / v2 / 国内版三端取代 |
| 阿里云 ECS 方案 |
用户选 C(WorkBuddy + SQLite) |
四、如何自行复核本表
cd /workspace/chat
git log --oneline --all # 全部提交
git status # 工作区状态
node build.js # 重建产物(会重写 cat-chat-all-in-one.js)
for f in tests/*.mjs; do node "$f"; done # 契约测试
线上版本核对(只读):
- Cloudflare API:/accounts/{acc}/workers/scripts/{name} 拉取线上 bundle;
- 国内版:curl http://127.0.0.1:3000/health(沙箱内)。
提醒:node build.js 会重写 cat-chat-all-in-one.js,属于「修改文件」。接手后若要跑,请先 git status 确认无未提交改动,或先建分支。