Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eternal Chat

GitHub:Timmyzzo/Eternal-Chat

Eternal Chat 是一个以“模型能力不被客户端偷偷削弱”为首要原则的现代 AI 对话桌面客户端。它同时强调高自由度:中转站、端口、协议、端点、模型能力、参数名、参数路径、工具描述和界面体验都可以由用户配置。项目使用 Tauri 2 作为桌面壳,React + TypeScript 负责界面和业务逻辑,Rust 仅承担通用流式网络管道。

当前仓库已完成并验证 Phase 1 工程脚手架与质量门禁Phase 2 Rust 通用流式管道Phase 3 SQLite、消息块与可恢复状态Phase 4 ContextAssembler 与工具连续性Phase 5 OpenAI 兼容双端点最小聊天纵切Phase 5A 自动重试与请求尝试Phase 6 全量端点、能力与参数目录Phase 7 结构化思考、搜索与信源Phase 8 核心聊天交互与长对话性能。Phase 8 已通过虚拟列表、分页/300 条 UI 窗口、Markdown 缓存与懒加载、编辑/分支、会话搜索/归档、1000 条 seed、侧栏直接操控、双视口延迟/滚动、React render 隔离和 100 次切换资源曲线门禁。完整跨品牌 MVP 仍按各自规格保持 in_progress,安全与隐私专题继续为独立的 deferred 工作,不阻断已验证的 Phase 8。

项目要解决的问题

普通聊天客户端往往把“界面上保存了历史”误当成“模型下一轮真的看到了完整历史”。对于搜索、文件分析、数据库查询、MCP 和多步骤研究,这两者一旦不一致,模型就可能只根据上一轮回答里的残缺摘要继续推断,并以流畅、自信的方式产生难以察觉的错误。

Eternal Chat 将以下原则作为产品契约,而不是实现细节:

  • 历史工具调用与工具结果必须在后续轮次中按 Provider 协议重新序列化,不能只保留在 UI 或数据库中。
  • 默认不进行隐形上下文裁剪、自动摘要或无提示降级。超过模型限制时必须给出可见、可解释的处理选择。
  • 内置模型目录只提供默认值,不能成为能力开关。未知模型同样可以配置 reasoning_effort: xhigh 等任意参数。
  • Provider 的显示身份不决定协议。同一个名为 Gemini、Claude 或其他品牌的模型,可以由中转站通过 OpenAI Chat Completions、Responses、Anthropic Messages、Gemini 原生接口或用户自定义协议暴露。
  • 每个端点独立配置 URL、显式端口、路径、协议 preset、认证、Header、Query、请求体、参数 schema、工具调用格式和响应映射;不能依赖模型名白名单或一套伪通用参数。
  • 参数的“温度”“Top K”“努力程度/思考预算”等名称只是 UI 语义提示,实际 wire key、path、类型、值域和是否发送完全由用户或端点 preset 决定。
  • 对 429、临时 5xx、连接失败和首包超时提供可配置自动重试;重试过程可见、可取消,收到有价值输出后默认不自动从头重发。
  • 保存并展示 Provider 实际返回的思考、搜索、工具、信源、计时和用量事件,但不把未返回的内部思维过程伪装成“完整思考链”。
  • 长对话的 UI 内存窗口与模型上下文是两套独立机制。UI 可以分页释放 DOM,模型上下文不能因此被偷偷删减。
  • UI 与交互采用现代、克制、响应直接的设计:即时反馈、可中断动效、稳定空间关系、清晰层级和充分的个性化设置。

文档与决策优先级

旧版单体设计文档已经完成拆分使命并删除。当前权威顺序是:用户最新明确要求、当前拆分规范、与外部 API 事实相关的官方最新文档、已接受的决策记录、参考资料、最后才是实现细节。

Claude、OpenAI API、ChatGPT、Grok 和 Gemini 官方文档是持续更新模型、能力、参数、工具和端点 preset 的权威来源。内置资料必须记录来源、核对日期和 revision,但不能覆盖用户修改版本。完整规则见 基线与决策治理官方 API 兼容矩阵

Cherry Studio 的用户文档GitHub 开发者文档是本项目长期外部参考生命线:前者用于用户流程与体验,后者尤其用于 AI 主链、数据、流式、Provider、测试和工程边界。当前任务的适用范围、差异化决定和官方 API 事实仍然优先,完整使用规则见 Cherry Studio 双文档参考指南

当前实现优先级

当前核心开发顺序如下;前五项已完成并验证,下一步进入多协议 codec:

  1. 按官方协议打通 OpenAI 兼容 Chat Completions 与 Responses 的基本聊天、流式、持久化和工具历史回放。
  2. 完成适合 NewAPI 等中转站的自动重试与请求尝试,优先处理 429、临时 5xx 和网络抖动。
  3. 完成连接、端点和协议 profile 的解耦,以及全量动态参数、能力和工具 schema;GPT、Grok、Gemini、Claude preset 只是可编辑示例。
  4. 完成结构化 reasoning、搜索链、信源和计时展示,再继续长对话 UI 打磨与其他 Provider 完整适配。
  5. 完成 Phase 8 的稳定全量门禁、输入延迟、资源趋势和交互验收。
  6. 实现 Anthropic、Gemini 与 custom codec,并验证跨品牌/混合协议行为。

各家字段以 官方 API 参数与工具兼容矩阵 为当前内置 preset 依据,但用户 schema 和原始覆盖始终优先。

计划技术栈

选型 责任边界
桌面壳 Tauri 2 窗口、插件、权限、打包与更新
UI React 19 + TypeScript + Vite 全部界面和业务逻辑
样式与组件 Tailwind CSS + shadcn/ui + Radix + lucide-react 主题、无障碍和交互组件
状态 Zustand 按 selector 精准订阅,拆分历史与流式状态
数据 SQLite + tauri-plugin-sql 连接、端点、协议 profile、模型、会话、消息、快照和迁移
网络 Rust reqwest + SSE 通用管道 发送最终 URL/Header/Query/Body、取消、超时、合批、回传原始事件
Markdown markdown-it + shiki + KaTeX 缓存、节流和懒加载
长列表 virtua 动态高度虚拟化和分页窗口

技术选型、依赖准入和待验证项见 技术选型与依赖策略,详细分层和运行时边界见 总体架构

MVP 范围

MVP 必须形成一个可靠的完整闭环:

  • 配置任意中转站及多个独立端点,包括不同协议、显式端口、路径、认证、Header 和 Query。
  • 自定义模型、能力 schema、参数 wire key/path、模型级和会话级 extra_body、工具 descriptor 与响应映射。
  • 创建会话并进行稳定的流式对话,支持停止、重试、编辑和分支。
  • 对发送前阶段的临时故障执行有界自动重试,展示 attempt 次数、原因、Retry-After 和倒计时。
  • 为 GPT、Grok、Gemini、Claude 提供可编辑的思考控制和 Provider 内置工具开关,不因模型不在目录中而禁用。
  • 持久化文本、思考、工具调用、工具结果、信源、用量、错误和请求审计信息。
  • 在下一轮请求中可靠回放当前分支的历史工具结果。
  • 展示 Provider 返回的结构化思考、Grok 搜索过程、工具进度、信源和耗时。
  • 对长会话进行分页、虚拟化、Markdown 缓存和 IPC 合批。
  • 提供导入导出、搜索、主题、快捷键和基础诊断能力。

知识库、MCP、同步、语音和插件 API 作为后续可关闭模块,不进入最初的核心运行时。

文档导航

文档 用途
文档中心 全部文档索引、阅读顺序与权威级别
产品需求 用户问题、范围、流程、功能优先级与产品验收
技术选型 已锁定技术栈、采用理由、未定事项、依赖准入和替换边界
总体架构 运行时边界、目录规划、依赖方向和端到端数据流
上下文与工具连续性 防止工具结果在下一轮消失的核心规范
Provider、端点与模型参数 多端口/协议、动态 schema、未知模型、xhigh 和请求合并规则
官方 API 兼容矩阵 GPT、Grok、Gemini、Claude 的思考字段、工具 descriptor 和官方来源
流式、思考与搜索事件 SSE 事件、Grok 搜索链、信源、计时、取消与恢复
数据模型 SQLite、消息块、附件、迁移、导入导出和审计快照
UI/UX 规格 三栏布局、关键页面、交互、无障碍和状态设计
性能预算 长对话、内存、帧率、IPC、Markdown 和基准场景
安全与隐私 当前暂缓,记录后续恢复专题设计时的范围
测试策略 单元、契约、集成、E2E、性能和发布门禁
开发路线 从脚手架到 MVP/V1/V2 的依赖顺序和退出条件
参考项目审阅 Cherry Studio 与 NBSearch 的借鉴、风险和许可边界
Cherry Studio 双文档参考指南 用户文档、开发者 docs 的长期参考规则、映射和采用边界
功能规格库 每项当前或规划功能的独立规格与状态
自动重试 中转站 429/5xx/网络错误的 attempt、退避、重试边界和 UI
贡献规范 未来实现时的开发、测试、文档和 Git 工作流
鸣谢与参考说明 NBSearch、Cherry Studio 的参考范围与发布鸣谢

当前目录

Eternal Chat/
├── README.md                         # 项目入口
├── ACKNOWLEDGEMENTS.md               # 开源鸣谢与参考边界
├── CONTRIBUTING.md                   # 开发协作规范
├── package.json                      # 前端、测试与统一质量命令
├── src/                              # React 应用与 TypeScript 平台边界
├── src-tauri/                        # 最小 Tauri 2 桌面壳
├── tests/                            # Web 层 E2E
├── docs/                             # 本项目详细文档与决策记录
└── Other project references/         # 只读参考源码,已从 Git 排除

参考项目边界

日常产品、协议、参数和 UI 设计应按 Cherry Studio 双文档参考指南 读取当前任务相关的 Cherry 文档;不要求无目的遍历 105 份文档。Other project references/ 中的参考源码仍只读,只有需要验证文档行为或比较具体实现时才进入源码目录。

  • cherry-studio-maindocs/ 是本项目长期核心工程参考,源码只用于验证文档与行为。当前快照使用 AGPL-3.0,不能把源码直接复制进本项目并假定没有许可影响。
  • NBSearch-feat-tauri-migration 可用于研究 Grok 流式搜索、思考事件和信源展示。仓库根目录未发现许可证文件,因此默认不得复制其源码或素材。
  • 本项目只吸收通用思想、行为契约和公开协议知识,所有实现必须从零完成。

开源计划

Eternal Chat 的本地 main 仓库已经初始化并关联 Timmyzzo/Eternal-Chat,Phase 1 基线已经提交并推送。具体许可证尚未由项目所有者确定,因此当前不得擅自添加或宣称使用 MIT、Apache-2.0、GPL/AGPL 等许可证。Phase 1 已生成工程用 第三方许可证清单,但发布前仍须完成最终 LICENSE、NOTICE 与分发义务审阅,并在 README 与 About 页面保留对 NBSearch 的鸣谢。详细边界见 鸣谢与参考说明

当前状态

项目 状态
当前拆分规范 baseline 已建立,作为唯一设计基线
官方文档持续追踪规则 已建立
应用脚手架 Phase 1 已验证:Windows 启动、深浅主题、小窗口、MSI/NSIS 打包
通用网络管道 Phase 2 已验证:请求透传、增量 SSE、30ms/64 事件/256 KiB 合批、取消/超时/错误、Channel 与资源清理
数据权威层 Phase 3 已验证:migration v1、10 张项目表、MessageBlock、分支/恢复/分页与 RequestSnapshot revision 关联
上下文与工具连续性 Phase 4 已验证:SQLite parent 链、虚拟根排除、sibling 隔离、ContextManifest、双 OpenAI serializer、最终 wire canary、500/50 隔离与预算预检
业务代码 Phase 5、Phase 5A、Phase 6、Phase 7 与 Phase 8 已验证;虚拟历史窗口、Markdown 渲染链、编辑/分支、会话库、性能 fixture 和直接操控侧栏已完成;Anthropic/Gemini 实际网络 codec/parser 属于 Phase 9
当前门禁 完整 pnpm verify 通过;Vitest 连续两轮 179/179,Playwright 21 通过/1 跳过,最终双视口输入延迟 p95 约 40.0ms/27.5ms,100 次切换 listener 恒定且最终回收堆低于基线
Git 仓库 本地 main 已关联 origin/main
开源许可证 待项目所有者在发布前决定

Phase 1 的工具链、依赖与 Motion 决定见 ADR 0001。Phase 5 的真实 Responses 冒烟与本地 Chat fixture 继续分开记录;Phase 5A–8 的错误、重试、参数、preset、mixed relay、结构化搜索链、信源、长对话交互和性能结论来自可重复的本地测试。当前执行入口和 Phase 8 退出证据见 精简路线图,Phase 0-7 的详细历史证据已移入 文档归档

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages