Repository navigation
Releases
Releases · catnuko/deer
v0.2.0
What's Changed
- fix(release): correct gh flag and idempotency in release workflow by @catnuko in #35
- dev → main:动效、阅读体验、划线笔记与 AI 引擎(60 提交) by @catnuko in #36
- Release v0.2.0 by @catnuko in #37
Full Changelog: v0.1.0...v0.2.0
安装 / Install
下载 Deer_0.2.0_aarch64.dmg,打开后把 Deer 拖进「应用程序」。构建未签名,首次启动请右键 Deer.app → 打开,或在终端执行 xattr -cr /Applications/Deer.app。
要求:Apple Silicon,macOS 11+;AI 功能需 Node 22.13+、acpx 与至少一个引擎 CLI。
v0.1.0
What's Changed
- chore(ci): 下线 QoderWake 编排,保留通用 CI(人工评审流程) by @catnuko in #31
- [QW-DEVOPS] Issue #28: Deer-09 概念笔记与连接(本地优先 MVP) by @catnuko in #29
- release: Deer-09 概念笔记与连接(本地优先 MVP)→ main by @catnuko in #33
- dev → main:同步 10 月 30 日以来的全部开发(含书架页改版与 acpx 唯一链路) by @catnuko in #34
Full Changelog: deer-v20261026-0500-8...v0.1.0
Deer v20261026-0500 (Milestone Deer-08)
Deer v20261026-0500(Milestone Deer-08:技术债打包)
修复与健壮性
- React #418 水合异常根治:/read 页挂载门控 + ThemeToggle 改用
useSyncExternalStore,首渲染与 SSR 一致;首页与 /read 全流程 console 零 Uncaught 报错(#418/#423/#425 家族彻底消失)。 - 深色主题持久化回归修复(B1):主题以 storage 事件单源同步,页面加载即应用存储主题,跨标签页跟随不劣化。
S2–S6 健壮性
- S2:chat 请求白名单校验,非法请求 400 静态拒绝,不回显凭据、请求体不入日志。
- S3:上游 30s 超时(
AbortSignal.timeout)→ 504 可区分错误,前端流式态正常收尾、不落盘悬挂消息、可重试。 - S4:上下文字符上限常量单点(
CONTEXT_LIMITS.maxReadingChars)。 - S5:选区提问携带显式
selectedText协议字段,移除前缀嗅探。 - S6:净化后相邻同角色消息以
\n\n合并,不跨会话、条数上限语义不变。
质量
- 测试 175 → 211 例(只增不减),lint 0/0、build 通过。
- 零界面文案变更、零 localStorage schema 变更。
已知残余风险
- 真实 30 秒上游超时的浏览器端实时等待未做实测(以单元测试 + 连接拒绝路径组合覆盖为准,置信度高)。
- 本地环境 favicon 404 为基线噪音,与本次改动无关。
发布信息
Deer v20261025-2337 (Milestone Deer-07)
Deer v20261025-2337(Milestone Deer-07:多会话列表与清空撤销)
本迭代让对话历史从「单会话」升级为「多会话管理」,并补上清空的后悔药。
新功能
- 历史会话列表:AI 面板新增「🗂️ 历史会话」入口,可查看与切换历史会话;跨不同阅读内容的对话各自独立、互不覆盖。每行展示首条提问摘要(选区提问自动剥离引用前缀)与相对时间(悬停可看完整时间),当前会话以徽章+底色双通道标识,点击即切换并置顶。
- LRU 淘汰:最多保留 20 个会话,超出后自动淘汰最早使用的(列表底部有说明,淘汰依据对用户透明)。
- 清空撤销:清空对话后出现「↩️ 撤销恢复」入口,一键找回被清内容并按原顺序逐字还原;刷新后仍可撤销一次(仅最近一次清空可撤销,再次清空会替换待恢复内容)。
相比 Deer-06 的改进
- Deer-06 已知限制①「仅保留单一会话(对文本 B 开始对话会覆盖文本 A 的历史)」——已解决:多会话列表按内容隔离,互不覆盖。
- Deer-06 已知限制②「清空作用于共享槽位、不可挽回」——已解决:清空支持撤销恢复。
数据说明
- 旧数据迁移:旧版
deer-chat-history单槽历史在你首次加载时会自动迁移为新会话并删除旧 key,无需手动处理。 - 隐私边界:撤销待用内容在下次清空前暂存于本机浏览器 localStorage,仅本地保存、无任何上传;持久化数据不包含 API Key、模型配置等敏感信息。
已知问题
- 存量 React #418 水合异常(基线既有,不影响使用,下个迭代作为技术债处理)。
发布信息
Deer v20261025-0512 (Milestone Deer-06)
Deer v20261025-0512(Milestone Deer-06:对话历史持久化)
本迭代让 AI 对话从「一次性」变为「可续存」:刷新页面或重新打开面板后,历史对话自动恢复,可以继续深聊。
新增
- 对话历史持久化(客户端 localStorage)
- 刷新页面 / 重新打开 AI 面板后,历史对话自动恢复,无需重新开始。
- 按阅读内容隔离会话:不同文章/内容各自对应自己的对话,互不串台。
- 新增「🗑️ 清空」按钮,清空当前会话并同步清除本地持久化历史。
- 损坏/非法存储数据容错:解析失败时安全降级为空历史,不阻断页面。
- 超过 100 条消息时自动淘汰最旧消息,防止存储无限膨胀。
- 持久化数据严格不包含 API Key、模型配置等敏感信息,仅保存对话消息本体。
行为变更
- 自本版本起,「刷新清空对话」改为「刷新恢复对话」。这是对 Deer-05 交互口径的有意变更,符合 Issue #19 的验收标准。
质量
- 代码评审复验 PASS:评审发现的 B1(空响应体时落盘半截对话)已在
af74a8b修复,并补充组件层回归用例。 - 独立测试:真实浏览器全量判定 9/9 验收标准通过。
- 自动化测试:8 个测试文件 / 132 用例全绿(新增
chat-storage30 例、ai-panel18 例回归)。
已知限制(如实声明)
- 单槽存储:同一内容只保留一个会话槽;对文本 B 开始对话会覆盖文本 A 的历史(多会话列表为后续候选需求)。
- 清空作用于共享槽位:切换阅读内容后执行「清空」,会连带删除另一段内容的会话历史。
/read页存在基线既有的 React #418 水合告警(非本迭代引入,建议后续单独立项处理)。
发布信息
Deer v20261025-0306-5 (Milestone Deer-05)
Deer-05 发布
新增功能
- 多轮对话上下文管理 (#15)
- 会话内追问与指代消解:AI 可结合本次会话已有对话回答追问(如「这段」「它」「第二个人」「刚才那段」)
- messages 数组统一组装(system + 裁剪历史 + 本轮输入),OpenAI 兼容与 Anthropic 请求形态统一
- 轮数 + 字符双预算裁剪(10 条 / 8000 字符),user 锚点整对单元,窗口首条必定为 user
- 系统提示加入指代消解引导与「不编造」约束
- 选中文本以【选中文本】标注块注入本轮用户消息,问句原文保留
- OpenAI / DeepSeek / Anthropic 三家 provider 流式兼容
质量
- 评审复验 PASS:AC3–AC9 全过,B1(字符预算裁剪可能产生 assistant 打头的非法对话)已修复并有回归用例
- 独立测试 101 项全绿(既有 93 项 + 8 项验收探针),含回退反证
- CI:test / reviewer / Vercel Preview 全部 SUCCESS
已知限制
Deer v20261022-0321-1 (Milestone Deer-04)
Deer-04 发布
新增功能
- AI 阅读助手面板 (#6)
- 右侧 AI 面板,可展开/收起
- 选中文本后出现浮动工具栏,点击「问 Deer」发送选中内容
- AI 回复采用流式输出(逐字显示)
- 「总结本章」快捷按钮
- 底部输入框支持手动输入问题
- 未配置模型时显示引导提示
- 对话历史在当前会话内可见,刷新后清空
技术改进
- 服务端 API 代理路由
/api/chat:处理 AI 请求,API Key 不暴露给浏览器 - 支持 OpenAI、DeepSeek(OpenAI 兼容格式)、Anthropic 三种流式格式
- 浮动工具栏验证选择区域在阅读容器内,避免误触发
测试
- 52/52 测试全部通过
- 评审 PASS(9/9 验收标准)
- 独立测试 PASS(9/9 验收标准)
已知限制
- CORS 跨域问题已通过服务端代理解决
- AI SDK 包已安装但当前使用原生 fetch 实现(可未来增强)
Deer v20261022-0256-1 (Milestone Deer-03)
Deer-03 发布
新增功能
- 内置 DeepSeek 模型提供商 (#10)
- AI 配置面板新增 DeepSeek 选项
- 默认 baseUrl:
https://api.deepseek.com/v1,默认模型:deepseek-chat - 复用 OpenAI 兼容的
/chat/completions接口 - 配置保存在浏览器 localStorage,刷新后自动恢复
测试
- 45/45 测试全部通过
- 新增 DeepSeek provider 相关测试用例
已知限制
- CORS 跨域问题待后续版本通过服务端代理解决
- 当前 AI 请求从浏览器直接发送到 LLM API
Deer v0.2.0 — 最小 AI 阅读原型
Deer-02 发布
新增功能
- 文本输入与阅读展示界面 (#4):文本粘贴输入、.txt/.md 文件上传、中文排版(行距 1.75)、深浅主题切换、左右布局、Markdown 渲染
- AI 模型配置与设置面板 (#5):内置 OpenAI GPT-4o / Anthropic Claude、自定义 API Base URL + 模型名称、API Key 本地存储、连接测试、未配置引导提示
技术栈
Next.js 16 + React 19 + TypeScript 6 + Vitest + Tailwind CSS
测试
- 44/44 测试用例通过
- lint / build 验证通过
- 独立测试验证 PASS