fix(coding-teacher): restore context and read project files
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# Task: Restore teacher conversation context and project file reading
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260922-teacher-context-c40f7b51
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260922-teacher-context-c40f7b51-teacher-context
|
||||
- Worktree: D:\Datas\OthersProjects\.codex-worktrees\makelore\20260922-teacher-context-c40f7b51
|
||||
- Base commit: 7f5131e92fb06f3357ca45f18aaead0e2eaa87e0
|
||||
- Owner: codex
|
||||
- Status: Ready for Integration
|
||||
|
||||
## Scope
|
||||
|
||||
- 复现并修复云端老师无法获得当前来源会话上下文的问题,并支持按需只读当前项目文件。
|
||||
- 以实际 Main service/model 路径建立失败测试;根据证据修复上下文准备、文件读取及必要 UI 提示,完成相关测试、类型检查和构建。
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- 使用 maintain-project-docs 与 diagnosing-bugs;Concurrent Task Gate / Planning Gate Passed,官方 start/status 已确认本任务独占 feature worktree。106 个 owner 任务记录已读取;既有未知范围保持只读,无已确认阻塞冲突。
|
||||
- 用户明确批准官方 release-missing 清除 17 条工作目录缺失的已完成任务登记;均已完成,只删除登记,保留分支和提交。此前 start 因此被阻断,未绕过门禁写代码。
|
||||
- 用户本次要求老师读取会话和项目文件,授权修正旧“无文件访问”边界;只读当前项目,不增加文件修改、命令执行、跨项目/账号读取或 Pi 编程执行能力。不创建子智能体。
|
||||
- 先通过真实路径的确定性测试捕获缺失上下文,再定位和修复。已复现长来源消息导致上下文全部被删除、无文件工具导致原生工具请求失败;冷会话历史恢复测试通过。未读取用户真实会话或调用真实付费模型,不将测试复现等同于用户当时运行日志。
|
||||
- 定位文档中模板空白以 README、AGENTS 与可执行代码补充;canonical 项目记忆仅提出 promotion,不在 feature 中修改。
|
||||
|
||||
## Outcome
|
||||
|
||||
- Main 老师服务现将当前项目路径、当前 active-branch 完整文本和当前老师话题的已完成历史交给本地只读工具。支持浏览目录、按行读取 UTF-8 文件和按消息 ID 读取本轮会话原文;允许 `.makelore/project.json` 配置,拒绝其他 `.makelore` 会话数据、Git 内部数据和越界路径。复用已有文件读取服务的项目边界、文本校验和 256 KiB 预览限制。
|
||||
- 原预算算法会逐条移除全部来源消息,长中文项目分析可只留下当前含糊追问。现在保留最近问题/回答的首尾节选;同时节选过长的上一轮老师回复,避免预留读取预算后连续追问失败。节选包含消息 ID,并可通过工具恢复中间原文;当前问题、明确引用和系统指令仍保留,超预算明确报错。
|
||||
- 原生 SSE 支持分片工具调用参数、只读结果回传和继续生成;每轮最多六批读取后要求最终文本,计算工具定义/结果/原生思考的输入预算,成组省略较早工具轮次并累计模型用量。思考内容仅用于 Main 内原生后续请求,不发给 Renderer、不持久化。每次读取和后续模型调用检查账号与取消状态。
|
||||
- UI 标明结合当前会话和项目文件答疑,显示上下文节选提示;既有话题无需迁移或重新创建,运营试聊仍不获得真实项目工具。README 已同步当前行为。
|
||||
- 本次只修改客户端,未修改云端协议、运营配置或数据库;不合并、不推送、不部署,不清理任务工作目录。
|
||||
|
||||
## Verification
|
||||
|
||||
- Red-capable loop:实际 CodingTeacherService 长来源测试首先失败,模型请求只含系统指令与当前追问;prepareTeacherModel 原生读取测试首先失败 `teacher_tools_unavailable`;长老师历史追问测试首先失败 `teacher_context_too_long`。修复后均通过。
|
||||
- `pnpm exec vitest run tests/unit/coding-teacher.test.ts tests/unit/coding-teacher-model.test.ts tests/unit/coding-teacher-read-tools.test.ts tests/unit/coding-teacher-ui.test.tsx`:44 passed。覆盖真实 service → source → model → 本地文件 → model continuation,冷历史 active branch、节选、老师原文恢复、路径边界、取消/账号变化、分片参数、原生思考、累计用量、读取轮数和输入预算、旧 UI 行为。
|
||||
- `pnpm exec vitest run tests/unit/coding-project-files.test.ts tests/unit/pi-session-projector.test.ts`:12 passed。
|
||||
- `pnpm exec playwright test tests/e2e/pi-coding-first-chat.spec.ts --grep 'project teacher side chat'`:1 passed;使用现有隔离 Electron fixture 验证新提示及带回主会话草稿,云端/模型边界为测试替身。
|
||||
- `pnpm run typecheck`、修改生产文件的定向 ESLint、`pnpm run build:vite`、`git diff --check`:通过。依赖使用仓库锁定的 pnpm 10.33.4 / frozen lockfile,锁文件未变化。
|
||||
- `pnpm exec tsc --project tsconfig.node.json --noEmit --composite false`:报告 66 条错误,与已记录 Main 基线数量一致;老师模块和 project-files 无诊断。未宣称全量 Main 类型检查通过,未扩大修复其他模块。
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- 集成时将本任务提交合入客户端 main,并按发布流程更新客户端后进行真实老师模型验收;本地测试未消费真实模型点数。
|
||||
- Main 全量类型检查的既有 66 条错误不在本次范围。
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target:`.project-docs/10-decisions/ADR-2026-09-22-coding-teacher.md`、对应 decision index、`20-architecture/` 老师数据流与 current-state。Proposal:将原“纯文字、无工具、无项目文件”边界更新为“Main 直接请求计费网关,有限的当前项目/当前会话只读工具,仍无 Pi 执行、写文件或命令”。Evidence:用户本次明确要求恢复会话和文件读取,新增 service/model/读取回归与 Electron UI 测试通过。Future impact:后续老师配置、客户端与联调应依此能力边界;云端发布载荷不变。Semantic conflict:旧 ADR 的 no-tools/no-files 明确冲突,不能把旧约束当成当前需求。Human confirmation:用户本次问题已授权该只读边界修正,集成时无需再次询问同一项授权。
|
||||
- Target:current-state / evidence index。Proposal:记录 UTF-8 字节预算逐条删消息可丢光长主会话;应保留最近问答节选,并提供本轮只读原文恢复。Evidence:原实现确定性失败测试与修复后通过的长来源、长老师回复和读取原文测试。Future impact:后续预算调整必须覆盖连续追问和工具结果开销。Semantic conflict:无;无需额外人类确认。
|
||||
Reference in New Issue
Block a user