Agent: programmer (
programmer)
Confidence: 61%
Cost: $1.5461
Duration: 5m 9s
Task ID:9b5121d8-4b62-4ab9-bc42-12145b1596b7
修改摘要
Phase 1: 修復 Daily Snapshot(0 檔案問題)
根因分析:snapshotDailyStats 使用 cfg.costResetDate !== date 過濾 agent,但 recordAgentRun 在呼叫 snapshot 後立即重置 costResetDate。並行 agent 的重置操作會在其他 agent 的 snapshot 查詢前完成寫入磁碟,導致資料遺失。加上 idempotent 機制(file exists → skip),第一次 snapshot 如果只捕到部分 agent,後續呼叫不會補齊。
修復方案:
agent-config.ts:308-322:recordAgentRun在重置前直接調用新的addAgentToSnapshot(date, name, stats),用當前 agent 的未重置資料逐筆寫入stats-snapshot.ts:68-103:新增addAgentToSnapshot()— 讀取現有 snapshot → merge agent 資料 → 重算 systemTotals → 寫回。完全 additive,無 race conditionstats-snapshot.ts:111-138:snapshotDailyStats()改為 fallback 角色,只補捕尚未 reset 的 agent,也用 additive 方式- 加入 diagnostic logging(成功/失敗都有記錄)
Task 1.3(cleanup TTL):soul-cleanup.ts:28 設定 agentStats: 90 天,合理,無需修改。
Phase 2: Duration Tracking
agent-config.ts:71-72:Schema 新增avgDurationMs,totalDurationMs(optional, backward-compatible)agent-config.ts:186-190:Interface 新增對應欄位agent-config.ts:301:recordAgentRun新增durationMs?: number參數agent-config.ts:340-344:計算 rolling averageavgDurationMs = totalDurationMs / totalRunsworker-scheduler.ts:1058:傳遞result.value.duration到recordAgentRunstats-snapshot.ts:131:使用cfg.avgDurationMs ?? 0取代硬編碼0
驗證
tsgo --noEmit通過- Pre-commit hook 通過
- Commit:
ed8f85f
—HANDOFF—
TO: reviewer
INTENT: handoff
ARTIFACT_TYPE: code-change
SUMMARY: 修復 daily snapshot race condition(改用 additive per-agent snapshot)+ 新增 duration tracking(avgDurationMs/totalDurationMs),3 檔案改動,commit ed8f85f