docs: integrate teacher streaming into main

This commit is contained in:
2026-09-29 18:30:58 +08:00
parent 8ccc4650a2
commit 6dee9ea62c
6 changed files with 54 additions and 1 deletions

View File

@@ -1,6 +1,6 @@
# ADR: 官方编程老师与项目会话导航
- Status: Accepted / implemented, project-scoped ongoing chat amended 2026-09-28
- Status: Accepted / implemented, independent reasoning and answer streaming amended 2026-09-29
- Date: 2026-09-22
- Approval: 用户确认项目默认 Agent、项目下会话、多老师列表与移除试聊;随后确认使用 Yuxi 原生智能体、客户端提供三个只读工具、沿用学生账号付费,并要求实施及合并。2026-09-24 明确取消客户端固定老师/朋友分类,统一使用后端下发智能体,并要求合并上下文预算修复。
@@ -10,6 +10,8 @@
## Decision
- 2026-09-29 用户要求 Yuxi 老师智能体的思考过程与结果都流式展示并授权合并。Main 从既有主线程事件分别接收思考增量和可替换的回答预览,经现有项目聊天 SSE 下发;思考使用独立字段保存,运行时展开、结束后折叠并可重新展开,不混入正文、工具活动、后续模型上下文或带回草稿。结构化回复未结束时仅投影已解码正文,不显示 JSON 外壳或未完成快捷回复;最终回复仍完整解析并确认正文和卡片。新消息或工具续接替换当前正文预览,同一问题的思考保留;取消或失败保留已收到的片段与原文。子线程仍只推进游标。只展示上游实际返回的思考,不更改模型配置或生成替代思考。
- 2026-09-29 用户要求并授权合并可配置快捷提示。老师快捷提示由 Yuxi 的有序 `teacher_shortcuts` 配置拥有,每项分别保存展示文案 `label` 和实际提示词 `prompt`;最多 8 项,去除首尾空白后文案 1–40 字符、提示词 1–6000 字符。普通保存只改草稿,显式发布固定列表并以 `shortcuts` 下发;同一发布重试读取原快照。明确的空列表隐藏所有入口,历史快照缺字段或 null 保留客户端旧入口,未配置草稿提供可编辑的默认项。Makelore 按顺序渲染文案,点击通过普通提问发送实际提示词,聊天记录显示实际提问;目录刷新保留项目聊天和草稿。
- 2026-09-29 用户确认一次显式发布和及时刷新并授权合并。Yuxi 管理员在可管理的原生智能体编辑页一次“保存并发布”即可更新 Makelore;普通保存只改草稿。Yuxi 固定不可变快照并携同一操作身份交给 WS,只有 WS 登记提交后才报成功,失败重试不发布后来编辑的草稿。WS 按来源绑定稳定老师 ID,首次复用唯一启用旧项,歧义需显式选择;保留默认、停用和历史,不自动合并旧身份,重新启用需要显式动作。
@@ -40,6 +42,8 @@
## Evidence And Release Boundary
- 2026-09-29 流式源 `8ccc4650a2d36ea4a1a7426dbaffc8178255a5e3` 已合入本地 main。322 项相关单测、标准类型检查、变更文件 lint、生产构建及 1 项 Electron 流式交互通过;合并保持产品与测试源一致。已核对 Yuxi 提交中的思考事件生产与保留协议,无配套服务端变更。需更新客户端;生产模型是否返回思考仍取决于云端配置与供应商,未进行真实收费模型或安装版验收。扩展 Main 类型检查仍有 66 项既有诊断,未涉及修改的老师文件。见[源记录](../30-worklog/tasks/20260929-teacher-stream-f00acb6f.md)和[集成记录](../30-worklog/tasks/20260929-merge-teacher-stream-1e4177fe.md)。
- 2026-09-29 目录刷新源通过 208 项相关单测、类型/lint/Vite 构建及独立审查;合并保持产品与测试源一致。WS 先升级 `20260929_0099` 和 revision/发布接口,再更新 Yuxi 与客户端;无本次客户端数据迁移。以下旧发布记录为历史,不代表当前 WS migration head。见[本次集成](../30-worklog/tasks/20260929-integrate-teacher-ml-a19f72c4.md)。
- 2026-09-28 组件移除源 317def79129503062d15076585881ceae753055c 无冲突快进合入本地 main。47 项相关单测、12 项浏览器布局、1 项 Electron 咨询场景及类型/lint/构建通过;产品与测试保持源字节,沿用其验证。没有服务端或历史数据迁移;未推送、打包或更新安装版。见[源任务](../30-worklog/tasks/20260928-remove-teacher-cards-ef1cf59c.md)和[集成记录](../30-worklog/tasks/20260928-merge-teacher-cards-a09c07f3.md)。

View File

@@ -1,5 +1,7 @@
# Decision Index
- [老师思考与回答流式展示](ADR-2026-09-22-coding-teacher.md):2026-09-29 已合并;主线程思考独立保存与折叠展示,正文逐步投影并由最终回复确认,快捷回复仅完成后显示;思考不进入后续模型上下文、工具活动或带回草稿。
- [老师可配置快捷提示](ADR-2026-09-22-coding-teacher.md):2026-09-29 已合并;Yuxi 有序展示文案/实际提示词,显式发布冻结,WS 版本化下发,客户端普通提问;空列表隐藏入口,历史缺字段保持旧入口。
- 2026-09-29 修订[下发智能体咨询决定](ADR-2026-09-22-coding-teacher.md):Yuxi 一次发布保持稳定老师身份;客户端五秒前台 revision 检查、入场/焦点刷新独立于聊天状态,保留项目连续聊天和运行快照。

View File

@@ -1,5 +1,7 @@
# System Overview
老师咨询沿用 Main-owned Yuxi 事件与项目聊天 SSE。`cloud-runner` 分离主线程 `reasoning_content`(兼容已保留的 `additional_reasoning_content`)增量和当前消息的回答原文预览;service 用 `previewTeacherReply` 从未完成结构化回复投影正文,最终仍由完整解析确认。新消息/工具续接替换正文预览,问题级独立 `reasoning` 字段继续累积,终态初次读取也消费保留事件。Renderer 分开展示思考和 Markdown 正文,运行时展开思考、终态收起,快捷回复只在完成后可见。取消/失败保留片段与原文;思考随轮保存但不进入模型上下文或带回正文,子线程只推进游标。无新增服务端协议或模型配置,未返回思考的模型仍正常输出正文。
咨询输入区从当前老师发布定义的 `shortcuts` 按序渲染展示文案,并通过已有普通提问路径发送实际提示词;不附加旧 suggestions 意图。明确的空列表隐藏入口,缺字段/null 保留旧入口。多项长文案在限定高度内滚动,正在回答时不可点击;目录更新不替换项目聊天或草稿,同一未确认提问重试保留请求身份。详见[老师决定](../10-decisions/ADR-2026-09-22-coding-teacher.md)。
云端咨询的 Main 声明 `read_protocol=2`:目录按层分页(默认深度 4、最多 6,跳过生成缓存),文件与捕获会话返回连续文本及准确的下一页行/Unicode 字符列。文件增量解码,不受 UI 预览大小限制。每问题最多 12 批、累计成功结果 64 KiB、单页 8 KiB;剩余不足 512 字节时停止读取。Yuxi 消费最后一批结果后通过 `tool_choice: none` 请求最终答案,保留原身份、版本、时限与幂等续接;未声明新协议的旧客户端保持六批。工具活动以问题与逻辑 tool_call_id 合并跨 Run 重放,原始 interrupt 工具错误不单独判为失败。Main 区分读取额度、上下文失效与协议错误;失败问题不自动重试。须先更新 Yuxi API/worker,再更新客户端;生产供应商与安装版验收仍待完成。

View File

@@ -4,6 +4,8 @@ This file is the integrated default-branch snapshot. Feature tasks record progre
## Integrated Through
- 2026-09-29:按用户要求,将老师流式源 `8ccc4650a2d36ea4a1a7426dbaffc8178255a5e3` 从 `f443f3b` 无冲突快进合入本地 `main`。Yuxi 主线程思考独立流式显示并保存,正文从未完成结构化回复逐步投影,最终回复确认正文与快捷回复;思考不进入工具活动、后续模型上下文或带回草稿。工具续接与取消保留已收内容,子线程仍只推进游标。产品与测试保持源一致,沿用 322 项相关单测、标准类型检查、lint、生产构建及 1 项 Electron 场景证据;扩展 Main 仍有 66 项既有诊断。已核对 Yuxi 现有事件协议,无配套服务端改动;需更新客户端,真实模型思考事件与安装版尚未验收。三份外来文档原样保留且未提交;未推送、部署或打包。见[源记录](tasks/20260929-teacher-stream-f00acb6f.md)和[集成记录](tasks/20260929-merge-teacher-stream-1e4177fe.md)。
- 2026-09-29:按用户要求,将已独立审查的快捷提示源 `53d5b6b` 无冲突快进合入本地 `main`。Yuxi 配置多项展示文案和实际提示词,显式发布冻结后经 WS 下发,Makelore 按序显示并通过普通提问发送;空列表隐藏入口,历史缺字段保留旧入口。源验证 73 项 UI 单测、21 项浏览器布局场景、类型检查、lint 和生产构建通过;独立 Reviewer PASS。合并保留已审查产品与测试,新增修改仅为项目记忆;原有跨仓 7 份外来文档保持未提交。快捷提示不新增迁移;上线顺序为 WS API、Yuxi、Makelore,本次未推送、部署或打包。见[源记录](tasks/20260929-teacher-shortcuts-ml-8ce941d7.md)及[集成记录](tasks/20260929-integrate-shortcuts-ml-b75d3c29.md)。
- 2026-09-29:用户确认“一次发布,自动更新 Makelore”并要求合并。源 `913ccad5774df9a8e1f8259394658a524f8255d4` 无冲突快进合入本地 `main`。Yuxi 管理员在可管理的原生智能体编辑页一次“保存并发布”即可更新 Makelore;普通保存只改草稿。Yuxi 固定不可变快照并携同一操作身份交给 WS,只有 WS 登记提交后才报成功,失败重试不发布后来编辑的草稿。WS 按来源绑定稳定老师 ID,首次复用唯一启用旧项,歧义需显式选择;保留默认、停用和历史,不自动合并旧身份,重新启用需要显式动作。 前台每五秒读取小型目录 revision,进入模块及回到前台补查,变化才重新读取完整配置;后台停止轮询。刷新独立于聊天、输入和正在回答,不触发模型。Main 每次接受新问题仍读取当前版本,运行中的问题固定原版本,同项目可见聊天保持连续。 独立 Reviewer 发现的历史字符串 ID `coding-teacher` 被 UUID 约束拒绝问题已修复并复核通过。WS 33 项(含真实 PostgreSQL 迁移/并发)、Yuxi 2260 后端单测/1 跳过及发布 HTTP/PG、worker/Redis、浏览器和前端构建,MakeLore 208 项及类型/lint/构建通过;具体分批证据见源记录。必须先部署 WS `20260929_0099`/API,再更新 Yuxi 和客户端;本次仅本地合并,未推送、部署或测量生产延迟。原有跨仓共 7 份外来文档保留未提交。此条更新旧运营必经和旧话题固定版本的发布说明,下方日期条目保留为历史。见[源记录](tasks/20260929-teacher-publish-ml-e6b32168.md)、[集成记录](tasks/20260929-integrate-teacher-ml-a19f72c4.md)。

View File

@@ -0,0 +1,41 @@
# Task: Integrate teacher reasoning and answer streaming into main
## Identity
- Task ID: 20260929-merge-teacher-stream-1e4177fe
- Mode: Integration
- Branch: main
- Worktree: D:\Datas\OthersProjects\makelore
- Base commit: f443f3bc668dfc6c9df111506d739d343ee82bba
- Owner: codex
- Status: Ready for Integration
## Scope
- Integrate completed teacher streaming source 8ccc4650a2d36ea4a1a7426dbaffc8178255a5e3 into local main and promote its accepted project-memory changes.
## Intent And Constraints
- User explicitly requested merging into main. Concurrent and Planning Gates Passed with exact registry identity and exclusive integration lock. Loaded entry, own/source records, positioning, current state, teacher ADR, architecture and domain/success rules; retained prior same-base peer scope assessment. Historical placeholder peer records remain unknown with no concrete conflicting dependency.
- Reused the human-authorized primary-checkout handoff recorded by the preceding integration task 20260929-integrate-shortcuts-ml-b75d3c29. Its drift check proved the same three foreign documents unchanged before official release/start --adopt-existing. Preserve them without staging: 20260901-package-122-c5e8.md, 20260901-package-123-d7f3.md and 20260902-client-hang-diagnosis-a47c9e2b.md under this task-record directory.
- Source records are read-only. Main owns cloud transport; preserve project isolation, published model configuration and billing. No subagents, product redesign, cloud writes, push, deployment or packaging.
## Outcome
- Fast-forwarded local main from f443f3bc668dfc6c9df111506d739d343ee82bba to source 8ccc4650a2d36ea4a1a7426dbaffc8178255a5e3 without conflicts. Main now includes independent streamed reasoning and answer previews with final reply reconciliation.
- Promoted the user-authorized source candidate into the teacher ADR, decision index, system overview, business rules and Integrated Through. README arrived with the source. The new visible reasoning rule supersedes the old visibility exclusion without including reasoning in answers, tools, future model context or bring-back drafts.
## Verification
- Source evidence: 322 distinct relevant unit cases, standard typecheck, scoped lint, final Vite production compile and one Electron streaming interaction passed. Extended Main typecheck has 66 documented existing diagnostics, none in changed teacher files. Source used deterministic fixtures; real paid-provider and installed-client acceptance remain unverified.
- Integration checks passed: source ancestry, identical product/tests/source record and diff whitespace. Reused source test evidence because additional edits only update canonical documents. Task-aware documentation drift checked before commit/completion.
## Follow-ups
- User explicitly approved cleaning source task 20260929-teacher-stream-f00acb6f at D:\Datas\OthersProjects\.codex-worktrees\makelore\20260929-teacher-stream-f00acb6f, including ignored dependencies/build output while preserving its branch and commits. Rechecked ready/managed registry state, clean source, committed source record and source inclusion in main; resolved the exact approved path before official retire from the primary checkout.
- Cleanup BLOCKED: official retire exited 1 with Git error `Directory not empty`. Git removed the linked-worktree registration and .git file, but left a partial directory (including node_modules and some source/resources). Branch codex/20260929-teacher-stream-f00acb6f-teacher-stream still resolves to 8ccc4650a2d36ea4a1a7426dbaffc8178255a5e3. Retained residue and remaining task registry state; did not bypass the skill's exclusive-retire rule with manual deletion or reconstruct metadata. Requires separate supported recovery. This does not invalidate the completed merge.
- Shipping the updated client and verifying production model reasoning availability remain release work, outside this local merge.
## Promotion Candidates
- Source candidate accepted and promoted as described above; no unresolved canonical conflict or additional promotion.

View File

@@ -2,6 +2,8 @@
## Project conversations and distributed agents
- 老师智能体的主线程思考与回答分别流式展示。思考独立保存,运行时展开、终态折叠且可重开,不进入正文、工具活动、后续模型上下文或带回草稿;无上游思考事件则不显示思考区。未完成结构化回复仅展示已解码正文,最终解析确认完整正文和快捷回复;快捷回复仅完成后显示。工具续接或新消息替换当前正文预览并保留本问题思考;取消/失败保留已收到的片段和原文,不冒充完整回答。
- 老师快捷提示由 Yuxi 的有序 `teacher_shortcuts` 配置拥有,每项分别保存展示文案 `label` 和实际提示词 `prompt`;最多 8 项,去除首尾空白后文案 1–40 字符、提示词 1–6000 字符。普通保存只改草稿,显式发布固定列表并以 `shortcuts` 下发;同一发布重试读取原快照。明确的空列表隐藏所有入口,历史快照缺字段或 null 保留客户端旧入口,未配置草稿提供可编辑的默认项。Makelore 按顺序渲染文案,点击通过普通提问发送实际提示词,聊天记录显示实际提问;目录刷新保留项目聊天和草稿。
- 前台每五秒读取小型目录 revision,进入模块及回到前台补查,变化才重新读取完整配置;后台停止轮询。刷新独立于聊天、输入和正在回答,不触发模型。Main 每次接受新问题仍读取当前版本,运行中的问题固定原版本,同项目可见聊天保持连续。