交接档案

01 · 项目总览与长期目标

档案版本:2026-10-27 | 证据等级见 README | 本文不含任何密钥、令牌或密码


1. 一句话

「小手机」= 猫爪聊天:一个单页、仿微信、手机优先的 AI 伴侣聊天 Web App。前端是唯一真源 index.html,后端是唯一真源 worker.js,构建时内联成单文件 cat-chat-all-in-one.js 部署到 Cloudflare Workers;另一套 Node 垫片(deploy-web/)把同一个 worker.js 跑在国内托管平台上,用 SQLite 代替 KV。数据按「角色(profile)」隔离,记忆分「长期记忆碎片 / 结构化档案 / 高光原话 / 经历 / 关联关系」五类,模型 Key 由用户在前端自填。

2. 项目起因与使用场景

3. 最初的需求(2026-10-05,原文要点)

用户第一条任务书写明「绝对不准重构我的代码结构,必须保留现有布局」,并要求一次性完成五组功能:

组 要求
一、前端 UI ①果冻气泡(backdrop-filter: blur(8px)、半透明白底、微高光边缘、圆角 16px、最大宽 75%)②圆形头像、必须可自定义上传,不写死默认图 ③猫爪印面板:点开先弹「颜文字 / 表情包」二级选项,颜文字点击填入输入框,表情包支持本地上传转 Base64 与粘贴 URL,右侧麦克风占位 ④长按菜单:复制 / 引用回复 / 删除单条 / 收藏,引用时输入框上方显示原文 ⑤消息状态:发送中 / 成功 / 失败可重试 ⑥动态状态胶囊:按后端 ai_status 渲染,没有就不显示(不留空白框)
二、数据与请求 ①localStorage 换 IndexedDB ②删掉 setTimeout 假回复,改真实 fetch,报错显示在气泡里
三、后端与记忆(核心) ①外接 Cloudflare D1 或 KV,用户输入与 AI 回复原封不动入库并带时间戳 ②每次发消息检索最相关历史原话 + 人设打包给模型,预留 Worker 地址 ③请求体预留 tools: []
四、高级功能 ①时间感知:前端带系统时间,后端注入提示词 ②主动消息:按时间间隔触发,每天 2–3 次
五、绝对禁止 ①不准一次性给几百行代码,要拆成几步教用户在手机上替换 ②不准重构结构、不准改 UI 风格

当时通过提问确认的三个方案(用户已确认): 1. 后端 Worker 统一转发(Key 不进前端直连); 2. 检索先用关键词匹配(不上向量库); 3. 主动消息由页面打开时检查(不用 Cron)。

4. 长期目标(任务书 v1.0,12 项能力)

来源:/root/uploads/1792388616892580314-文本.txt(《小手机项目|完整系统升级与安全改造任务书 v1.0》,27KB)

  1. 完整保存所有聊天原文
  2. 可靠的本地与云端同步机制
  3. 独立的高光原话库
  4. 结构化的经历记忆
  5. 可追溯来源的记忆时间线与关联关系
  6. 可搜索、可导出、可恢复的完整聊天档案
  7. 分层人设系统与人设版本管理
  8. 定期批量运行的人设成长分析
  9. 带证据、反例、审核、回滚的成长建议流程
  10. 统一的后台管理系统
  11. 沈屿本体的历史聊天 / 人设 / 记忆迁移
  12. 控制 Token 与 Cloudflare 成本

核心原则(原文):保留现有可用能力,优先修复真问题,再逐步加功能;禁止为了新功能破坏原有项目。

5. 当前三个线上入口

入口 地址 运行时 存储 定位
v1 https://zhai.beibbloveme.workers.dev Cloudflare Worker zhai KV chat_memory_v2 历史主库:真实聊天归档与记忆都在这里(用户长期使用的入口)
v2 https://zhai-v2.beibbloveme.workers.dev Cloudflare Worker zhai-v2 KV chat_memory_v3 按用户要求全新重建的空环境(2026-10-24 深夜),不是搬迁失败
国内版 https://a0cd1755f00a22a37.app.workbuddy.host Node 22 + server.js 垫片 /tmp/cat-chat-data/chat.db(SQLite) 国内直连可用、无 KV 配额限制;数据是 v1+v2 合并导入 + 新聊

命名坑(务必记住):chat_memory_v2 是 v1 的库;chat_memory_v3 才是 v2(zhai-v2)的库。用户口中的「v3 后端 = 全新的那个 = 配置里叫 v2」,指的是 zhai-v2 + chat_memory_v3。

6. 当前状态快照(2026-10-27 00:45)

维度 状态
代码 分支 main,HEAD 5666a72(2026-10-25 20:36),工作区无已修改文件(仅有未跟踪的文档/截图)
v1 已部署 a3ef2a33(10-25 22:54),含「KV 配额烧穿」修复;线上 bundle 与本地逐字节一致【线上核验】
v2 已部署 8c6fe98a(10-25 20:38),同一份代码(etag 与 v1 相同)【线上核验】
国内版 进程 22:26 重启,已加载新代码;页面注入 cat-web-token 与 __CAT_WEB_MODE__【实测】
聊天可用性 国内版完全可用;v1/v2 在 10-26 08:00(北京时间)KV 配额重置前处于降级模式(能聊、提示「云端检索今日配额已用完」)
数据规模 国内版 SQLite:652 键(消息 320 / 记忆 312 / 高光 2 / 经历 1 / 元数据 2 / 限流 14 / 主动计数 1 / 墓碑 0)【实测】
测试 tests/ 共 10 个脚本、约 206 项断言,全部为「内存/SQLite Mock + Mock 模型」的契约测试,无生产 E2E【源码】
最大风险 见 07:P0 三项(前后端寻址分裂、彻底删除不清 mem:、页面公开下发令牌)

7. 与原设计的差距(一句话版)

详细依据见 03_任务清单与真实进度.md、05_长期记忆与收藏系统历史档案.md。

本页由交接包内的 Markdown 原样转换;内容未改动。源码与完整包请回目录页下载。