# AirCoding 全量上下文导出 — 回话恢复用 > 导出时间:2026-06-08 > 用途:在新会话中还原本轮全部状态(决策、plan、问题根因、参考复用映射、执行框架)。 > 使用方法:新会话中 `Read /home/airlongdian/DataDevices/AirWorkSpace/AirCoding/状态交接.md` 即可恢复全部上下文。 --- ## 1. 仓库与分支 - 仓库根:`/home/airlongdian/DataDevices/AirWorkSpace/AirCoding`(软链 `/run/media/airlongdian/EasyU/AirCoding` 指向同一目录) - 远端:`` - 第一轮修复分支:`GLM5-Achieve`(已推送,commit ddefcbb) - bun 路径:`/home/airlongdian/.bun/bin/bun` - LLM 配置(真实端点,用 OPENAI_ 前缀,不要用 AIRCODING_API_URL 否则适配器重复加 /v1): - `OPENAI_API_KEY=${OPENAI_API_KEY}` - `OPENAI_BASE_URL=http://newapi.airlongdian.fun` - `AIRCODING_MODEL=glm-5.1` - `AIRCODING_REPO_ROOT=/home/airlongdian/DataDevices/AirWorkSpace/AirCoding` ## 2. 本轮之前做了什么(第一轮集成修复,commit ddefcbb) 真实修复(已验证): - 工具契约 output/content 统一(BuiltInToolRegistrar) - shell.run AsyncGenerator 消费(ToolRegistry.execute_executor_final) - Scheduler 删除"!has_running() 全标 completed"假完成逻辑,改为按 WorkerResult.status 终结 - WorkerProcess on_exit → WorkerManager handle_worker_exit(无结果退出生成 failed result) - MainAgent 接入 ContextAssembler(L0-L9 + project_files 快照) - run.ts 确认门 y/n 路由(pendingConfirmation 状态机)+ 中英文危险词正则 - ExecutorRole 严格 DONE(is_done_signal 整行匹配)、code block 原文保留 - CapabilityRegistry 接入 RuntimeApp/DoctorService/ServiceRegistry - ArchitectureDesigner 接入 MainAgent 主路径(impact gate) - Permission ask_user/deny 保留 call_id - release.ts findRepoRoot/findBun + 真实 gates - /results 优先 WorkerResult.changed_files,过滤 .air - 新增 release-critical-gates.test.ts(5 条真实行为 gate)+ CLI run-command-regression.test.ts 未修复(第一轮遗留): - EventStore.setRepositories 运行路径从不调用 → domain 表恒空 - task.created 从不发出 - TUI 是手写 ANSI,非 OpenTUI - air ask 旁路 Scheduler/Worker 架构(自带内联循环) - ProjectionStore 运行时不被事件驱动,run.ts 手工假 snapshot 门禁:air e2e 14/14,release --dry-run 3/3。但绿灯和可用性正交。 ## 3. opus 四视角交叉审查结论(2026-06-08,四 opus 子代理并行) 四视角综合判定:**可内测演示(限 air ask),不可对外 Alpha 发布**。 新发现的核心问题: - **P0-1** EventStore.setRepositories 运行路径从不调用 → INV-1/FR-004 运行时整体失效 - **P0-2** Scheduler.create_tasks 不发 task.created(注释谎称发出) - **P0-3** TUI 非 OpenTUI/Solid(手写 ANSI),@opentui 零依赖 - **P0-4** air ask 旁路整个调度/Worker 架构 - **P0-5** failed 任务被调度机当成 COMPLETED - **P0-6** Worker exit/result 竞态('exit' vs 'close') - **P0-7** fs.edit 参数名不匹配(old_str/new_str vs find/replace),Agent 调用恒失败 - Worker 心跳不刷新,>5min 任务被误判 lost 审计报告文件(仓库根): - `集成测试阶段MiniMax-M3审查结果.md` - `集成测试阶段Deepseek审查结果.md` - `集成测试阶段GLM5.1审查结果.md` - `集成测试阶段Gpt5.5审查结果.md` - `集成测试阶段opus审查结果.md`(本轮新增) ## 4. 用户核心要求(本轮拍板,优先级明确) 1. **无工作量优先级,三条主线全部实现**(事件地基 + 执行体 + UI) 2. **界面对齐 opencode**(复用它现成的 @opentui/solid TUI,不要自己写简陋版) 3. **执行体对齐 claude code cli**(read-before-edit / verification-before-completion / 结构化工具调用 → 代码层强制,不只是 prompt 文字) 4. **复用 reference/ 全部项目**,不是"参考模式重写"——能直接移植就移植,冗余依赖可接受,最终产品编译质量不受影响即可 5. **需求 > 架构冻结**:当原始需求与冻结的 UML/contracts 冲突时,改 UML 服从需求,记录但不停等批准 6. **廉价模型执行 + 主模型复审**:每个主线由廉价模型做机械执行,主模型每阶段复审(读 diff、查 DB、跑验收,不信自报) 7. **经验学习闭环不要漏**(hermes 的 debug 经验总结、curator、skill 系统) ## 5. 根因分析(为什么"约束很详细还是做歪了") 三个逃生舱: 1. **unknown? 逃生舱**:contracts 用 `tools?: unknown[]` 占位 → 实现合法不做,tsc 不报错 2. **源码字符串断言冒充验收**:28 测试 18 个是 `readFileSync(src).toContain('词')` → 空壳能过 3. **completed 由"写了代码"触发**,不由"达成意图"触发:#158 TUI 标 completed 实为手写 ANSI 事件链路割裂(主线 A 修复的根因): - `EventStore.ts:942` 导出模块单例 `eventStore = new EventStore({})`(空 DB handle) - `EventIngestor.getEventStore()` 用这个单例 - Scheduler 通过 `import { eventIngestor }` 发事件 → 全部流向这个空单例 - RuntimeApp 另建 `new EventStore({db})` 赋给 `this.event_store`,只对它 setTransactionManager - 两个实例割裂,domain 表恒空 ## 6. 参考项目复用映射(关键:reference/ 就是 AirCoding 的设计血统) | 参考项目 | 对应 AirCoding | FR | |---|---|---| | opencode-1.15.5 | TUI 结构 + @opentui/solid 用法 | FR-016 | | claude-code-cli | 执行原语、Tool 契约、ToolUse/Result block、FileEditTool readFileState | FR-009 | | openai-codex | 工具广度、shell/patch/test loop | FR-009/010 | | hermes-agent-2026.5.16 | 经验学习闭环(curator/memory/skill/error_classifier/context_compressor) | FR-008/014 | | claude-hud-0.0.12 | HUD 显示(context/tools/agents/todo) | FR-016 | | anthropic-skills | SKILL.md 标准 + Agent Skills spec | FR-012 | | air-suite-20260518 | **AirCoding 插件原型**(airarc/aireng/airdo/airdbg/airxdb/airndb/airsdb) | FR-006/007/008/017 | | atuin-18.16.1 | shell 历史(辅助) | — | | asciinema-3.2.0 | 终端录制(辅助 evidence) | FR-015 | 复用核心来源(取证确认): - claude-code-cli `tools/FileEditTool/FileEditTool.ts:275-290`:`readFileState.get(path)` 检查 → 未读报错 "File has not been read yet" - claude-code-cli `Tool.ts:1-6`:`import { ToolResultBlockParam, ToolUseBlockParam } from '@anthropic-ai/sdk'` - opencode `footer.prompt.tsx`:OpenTUI textarea 输入框 + keymap - opencode opentui 版本:0.3.0(`package.json:41-43`) - hermes `agent/curator.py`、`memory_manager.py`、`error_classifier.py` ## 7. 第二轮规划文件(全部在 `/home/airlongdian/.claude/plans/`) | 文件 | 内容 | |---|---| | `round2-MASTER.md` | 总纲:根因 + 永久纪律 N1-N5 + 需求§6 锚定 + 三主线总览 | | `round2-REUSE-MAP.md` | 参考项目→AirCoding 复用映射表(每个 reference 项目对应的模块/文件) | | `round2-A-events.md` | 主线A:事件落库地基(统一 EventStore 单例 + task.created 发出 + 验收:DB 真有数据) | | `round2-B-execution.md` | 主线B:执行体对齐 claude code(content block 类型 + read-before-edit 强 + verification + 结构化 tool_use) | | `round2-C-ui.md` | 主线C:界面对齐 opencode(@opentui/solid 直接移植优先 + 冗余依赖可接受) | | `round2-D-experience.md` | 主线D:经验学习闭环(hermes curator/error_classifier/skill 移植到 ExperienceMiner/Debugger/Compactor) | | `round2-E-gates.md` | 主线E:反作弊门禁(需求§6 13条行为化 + NFR-006 + fail-on-missing) | | `round2-EXECUTOR-PROMPT.md` | **可直接复制给廉价模型的启动指令** | ### 执行顺序:A → B → (C ∥ D) → E - A 是 C/D 的前提(事件落库才能有真实投影供 TUI 消费) - B 与 A 无强依赖,建议顺序做(改动交叉) - C 和 D 可并行(都依赖 A) - E 贯穿收口 ### 每主线验收硬线 - A:session.db 的 tasks 表 count > 0(不达成不准进 C/D) - B:read-before-edit 代码强制(未读先改被拒)+ 结构化 tool_use + executor-role 功能测试 - C:TUI 无手写 ANSI、可输入、状态来自真实投影、不依赖 runtime - D:ExperienceMiner/Compactor 非空壳、CapabilityRegistry 加载 skill - E:需求 §6 13 条各有行为 gate 且绿 ## 8. 永久纪律 N1-N5(各 plan 文件中重申) - N1 消灭 unknown? 逃生舱(本轮触及的契约字段补具体类型去可选) - N2 验收必须执行被测代码(禁止用 grep 源码字符串当 gate) - N3 completed 由验收命令通过触发(不是"我写完了") - N4 改不动或与描述不符就停下报告,不自由发挥 - N5 每阶段贴真实输出(TSC 退出码、测试 pass/fail、DB 行数——原样贴) ## 9. 五份审计报告(仓库根,已 git 跟踪) 1. `集成测试阶段MiniMax-M3审查结果.md` 2. `集成测试阶段Deepseek审查结果.md` 3. `集成测试阶段GLM5.1审查结果.md` 4. `集成测试阶段Gpt5.5审查结果.md` 5. `集成测试阶段opus审查结果.md`(本轮新增) ## 10. 回话恢复操作(新会话中执行) 1. 确认仓库存在:`cd /home/airlongdian/DataDevices/AirWorkSpace/AirCoding && ls` 2. 确认分支:`git log --oneline -3`(应在 GLM5-Achieve,最新 ddefcbb) 3. 读本文件恢复上下文:`Read /home/airlongdian/DataDevices/AirWorkSpace/AirCoding/状态交接.md` 4. 读总纲:`Read /home/airlongdian/.claude/plans/round2-MASTER.md` 5. 定位上次进度:如果主线A尚未完成,从 `round2-A-events.md` 继续;如果A已完成,检查 session.db 的 tasks 表,确认后发主线B 6. 给廉价模型的指令模板:读 `round2-EXECUTOR-PROMPT.md`,复制「===」之间的内容给廉价模型 7. 复审流程:执行模型贴回验收输出 → 主模型读 diff / 查 DB / 跑验收 → 通过放行下一主线 ## 11. 当前剩余核心决策点(可选在新会话中确认) - TUI:C0 如果 @opentui/solid 0.3.0 在当前 Bun 版本装不上,是降版本还是换方案?当前用户已确认「冗余依赖可接受、直接移植优先」 - air ask 旁路架构:是否要删掉内联循环统一到 Scheduler→Worker(不在本轮A-E,留后续) - 第二轮修复的 git 分支:是继续 GLM5-Achieve 还是新开分支 ## 12. 用户核心价值取向(从会话中提取,新会话中如遇决策歧义以此为锚) - 不接受架构降级,但需求 > 冻结(需求冲突时改 UML 服从需求) - 不接受空壳实现(prompt 文字冒充代码强制不可接受) - 复用成熟实现 > 自己写(手写简陋版是之前反复出问题的根源) - 质量 > 速度;真实验收 > 绿灯数字 - "小步快走"但每一步交付物真实可验证,不靠标记自报 --- *如需在新设备继续,git pull GLM5-Achieve 后按 §10 操作即可。*