Merge remote main preserving project chats and reply recovery
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled

This commit is contained in:
2026-09-28 20:51:33 +08:00
54 changed files with 3189 additions and 1713 deletions

View File

@@ -5,12 +5,16 @@
- 每个新项目创建内部默认 Agent,普通界面无 Agent 创建步骤或分组列。defaultAgentId 选取已存默认、置顶或首个可用 Agent;历史 Agent 与会话绑定不重写,不重新启用停用/归档 Agent。
- 项目直接显示会话并保留归档、改名、未读、运行状态;打开项目不创建空会话。首次发送或显式新建才创建。项目设置编辑默认配置,历史会话仍能定位原绑定配置。
- 每个账号/项目/稳定下发智能体ID只有一个可见聊天,不同项目隔离历史、草稿、已读及模型上下文。每个问题使用接受时的当前发布版本,并冻结项目、Pi来源及公开消息;同项目相同作用域复用内部线程,来源或版本变化只开启内部执行段。切换项目恢复独立聊天,不复用其他项目checkpoint或历史。Main三个只读工具仍限本轮项目,允许 `.makelore/project.json`,无本机写入或命令;每次读取与续接检查绑定及取消状态。完整工程不全量上传。
- 同requestId相同输入读取当前项目聊天的已有结果(包括更早历史页),不同输入冲突;同一账号/项目/智能体一次接受一轮人工问答,各项目接受锁独立。SSE、取消、保存、讨论和已读均绑定项目,其他项目不能取消本轮。重启将未完成问题标为中断,账号退出中止。带回回答核对原项目/Pi来源,只追加草稿且不自动发送;已归档来源必须先恢复。
- 同requestId相同输入读取当前项目聊天的已有结果(包括更早历史页),不同输入冲突;同一账号/项目/智能体一次接受一轮人工问答,各项目接受锁独立。SSE、取消、保存和已读均绑定项目,其他项目不能取消本轮。重启将未完成问题标为中断,账号退出中止。带回回答核对原项目/Pi来源,只追加草稿且不自动发送;已归档来源必须先恢复。
- 运营只管理下发、同步、默认与启停,无重复提示词编辑器或试聊。老师聊天模型由学生账号付费,个人 Agents 保持创建者付费。正文、历史及带回草稿只接收云端主线程文本;忽略子线程文本仍推进游标。
- 客户端不内置老师/朋友角色:名称、头像、简介、欢迎语、推荐问题及人格由服务端发布定义决定,通用讨论协议不定义人格。任意名称的下发智能体都遵守同一只读工具边界;不再按角色限制项目读取。
- 顶栏点击直接恢复当前项目的唯一聊天,没有新话题加号和话题下拉框。历史分页,已读由Main持久保存;草稿与阅读缓存按账号/项目/智能体隔离,引用仍绑定原项目/Pi,迟到响应不得进入另一项目。旧全局聊天依据每轮可证明的项目归属分入对应聊天,映射已读并开启新云端执行段;保留原文件与请求身份,不明归属仅留原档案。旧全局草稿只导入记录的项目,优先于更早话题草稿且保留原值。更早项目话题仍按当前账号、config_id与项目/话题/请求来源去重导入,不按名称猜归属。历史讨论状态仍按项目保存,但对话栏不再渲染讨论组件、邀请、焦点或操作按钮;新问题与引导求助不再请求组件输出,旧未确认请求重试保持原身份及完整输入。旧Renderer定时跟进不再向现代聊天派发;独立主动观察后续也须投递到对应项目的同一聊天。
- 客户端不内置老师/朋友角色:名称、头像、简介、欢迎语、推荐问题及人格由服务端发布定义决定,回复格式协议不定义人格。任意名称的下发智能体都遵守同一只读工具边界;不再按角色限制项目读取。
- 顶栏点击直接恢复当前项目的唯一聊天,没有新话题加号和话题下拉框。历史分页,已读由Main持久保存;草稿与阅读缓存按账号/项目/智能体隔离,引用仍绑定原项目/Pi,迟到响应不得进入另一项目。旧全局聊天依据每轮可证明的项目归属分入对应聊天,映射已读并开启新云端执行段;保留原文件与请求身份,不明归属仅留原档案。旧全局草稿只导入记录的项目,优先于更早话题草稿且保留原值。更早项目话题仍按当前账号、config_id与项目/话题/请求来源去重导入,不按名称猜归属。历史组件状态仅保留在原档案,既不渲染,也不主动导入或发送给模型。旧未确认请求重试保持原请求身份、问题、引用及来源,去除退役组件字段。旧Renderer定时跟进不再向现代聊天派发;独立主动观察后续也须投递到对应项目的同一聊天。
- 输入预算区分近似模型 Token 与精确云端 JSON 字节,编译和提交使用同一完整请求计量。保留当前问题、明确引用和固定指令,按需缩减来源节选;固定配置/讨论超限不误报为用户短问题过长,不静默提升预算或迁移旧话题。
- 新咨询由 Main 统一声明 `{reply, quickReplies}`,正文和 0–3 条可选快捷回复按所选智能体云端配置生成,客户端只提供入口事实、上下文与输出格式。超额新卡片保留正文及原文诊断,不截断或展示;历史卡片数量不改写。旧组件状态和快照作为不透明档案保留,不恢复交互、主动导入或进入模型上下文,旧组件修改路由已移除。
- 完整正文可从保留原文中在本地恢复;无法确认完整时显示缺失提示,由用户明确点击重新回答,保持原问题、引用和项目/Pi 来源,保留现有草稿,采用当前发布版本。被动恢复不调用模型或改写已完成原始轮文件;不完整回答和未解析原文不进入后续模型上下文。
- 进入咨询消费静态欢迎语并按账号/项目保存,真实未读消息不随打开自动已读;空输入框的“继续看看👀”仅在点击时调用模型。
依据:[老师决定](../10-decisions/ADR-2026-09-22-coding-teacher.md)及 [ADR-008](../10-decisions/adr-008-interactive-ai-app-scaffold.md)。
## Permanent Token Points