baa-conductor

git clone 

baa-conductor / tasks
im_wower  ·  2026-03-29

T-BUG-028.md

  1# Task T-BUG-028:修复查询路由和 ask 超时逻辑问题
  2
  3## 状态
  4
  5- 当前状态:`已完成`
  6- 规模预估:`S`
  7- 依赖任务:无(与 T-BUG-027 可并行)
  8- 建议执行者:`Claude`(需要理解 local-api 查询路由和 daemon ask 生命周期)
  9
 10## 直接给对话的提示词
 11
 12`/Users/george/code/baa-conductor/tasks/T-BUG-028.md` 任务文档,完成开发任务。
 13
 14## 当前基线
 15
 16- 仓库:`/Users/george/code/baa-conductor`
 17- 分支基线:`main`
 18- 提交:`f26dd00`
 19
 20## 分支与 worktree(强制)
 21
 22每个任务必须使用独立的分支和 worktree,禁止直接在 main 上修改,禁止多个任务共用同一个 worktree。
 23
 24- 分支名:`bug/query-routes-and-ask-timeout`
 25- worktree 路径:`/Users/george/code/baa-conductor-query-routes-and-ask-timeout`
 26
 27开工步骤:
 28
 291. `cd /Users/george/code/baa-conductor`
 302. `git worktree add ../baa-conductor-query-routes-and-ask-timeout -b bug/query-routes-and-ask-timeout main`
 313. `cd ../baa-conductor-query-routes-and-ask-timeout`
 324. 在这个 worktree 目录里开发,不要回到主仓库目录
 33
 34完成后提交与推送(由执行者完成,不要合并):
 35
 361. 在 worktree 里提交所有变更(包括更新后的任务文档)
 372. `git push -u origin bug/query-routes-and-ask-timeout`
 38
 39## 目标
 40
 41修复 sessions 查询端点缺失 conversation_id 过滤,以及 claude-coded daemon ask 超时与正常完成的竞争条件。
 42
 43## 涉及仓库
 44
 45- `/Users/george/code/baa-conductor`
 46
 47## 允许修改的目录
 48
 49- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts` (sessions 查询路由)
 50- `/Users/george/code/baa-conductor/apps/claude-coded/src/daemon.ts` (ask 超时逻辑)
 51
 52## 尽量不要修改
 53
 54- `/Users/george/code/baa-conductor/packages/`
 55- `/Users/george/code/baa-conductor/plugins/`
 56- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
 57
 58## 必须完成
 59
 60### 1. sessions 查询端点补 conversation_id 过滤
 61
 62**文件**:`apps/conductor-daemon/src/local-api.ts` 中 `handleArtifactSessionsList`
 63
 64**问题**:messages 和 executions 端点都支持 conversation_id 过滤,但 sessions 端点遗漏了。`store.listSessions()` 已支持 conversationId 参数但没被调用。
 65
 66**修复方案** 67- 从 query 中读取 `conversation_id`(用现有的 `readOptionalQueryString` 68- 传给 `store.listSessions({ platform, conversationId, limit, offset })`
 69- 在响应的 `filters` 对象中加上 `conversation_id: conversationId ?? null`
 70
 71### 2. 修复 ask 超时与正常完成的竞争
 72
 73**文件**:`apps/claude-coded/src/daemon.ts` 中 ask/askStream 的超时逻辑
 74
 75**问题**:超时 timer 和正常 resolve 没互斥。如果正常完成后 timer 仍然触发,可能导致 `rejectPendingAsk` 在已完成的请求上执行。
 76
 77**修复方案** 78- 正常完成时用 `clearTimeout(timer)` 取消超时计时器
 79- 或用 `done` 标志位互斥,确保 timer 回调中检查 `done` 后 return
 80- 确保 resolve 和 reject 不会双触发
 81
 82## 验收标准
 83
 84- `curl http://100.71.210.78:4317/v1/sessions?conversation_id=xxx` 能按 conversation_id 过滤
 85- 响应的 filters 对象包含 `conversation_id` 字段
 86- ask 正常完成后超时 timer 被取消,不会触发 reject
 87- 所有现有测试通过
 88
 89## 推荐验证命令
 90
 91- `cd /Users/george/code/baa-conductor-query-routes-and-ask-timeout && pnpm build`
 92- `cd /Users/george/code/baa-conductor-query-routes-and-ask-timeout && pnpm test`
 93
 94## 执行记录
 95
 96> 以下内容由执行任务的 AI 填写,创建任务时留空。
 97
 98### 开始执行
 99
100- 执行者:Claude
101- 开始时间:2026-03-29
102- 状态变更:`待开始` → `进行中`
103
104### 完成摘要
105
106- 完成时间:2026-03-29
107- 状态变更:`进行中` → `已完成`
108- 修改了哪些文件:
109  - `apps/conductor-daemon/src/local-api.ts` — sessions 端点补 conversation_id 过滤
110  - `apps/claude-coded/src/daemon.ts` — askStream resolve/reject 回调补 clearTimeout
111- 核心实现思路:
112  1. `handleArtifactSessionsList``readOptionalQueryString` 读取 `conversation_id`,传给 `store.listSessions()`,并在 filters 对象中返回
113  2. `askStream``pendingAsk.resolve``pendingAsk.reject` 回调首行加 `clearTimeout(timer)`,确保正常完成或手动 reject 时立即取消超时计时器,避免竞争
114- 跑了哪些测试:`pnpm build` + `pnpm test`(全部通过)
115
116### 执行过程中遇到的问题
117
118119
120### 剩余风险
121
122123