Skip to content

fix(heartbeat): 心跳风暴回路 + lastHeartbeat 落库接线 + 心跳能力放开(A/B/C 入库) - #332

Merged
jsyqrt merged 2 commits into
mainfrom
hotfix/context-heartbeat-abc
Sep 25, 2026
Merged

jsyqrt merged 2 commits into
mainfrom
hotfix/context-heartbeat-abc

Conversation

@jsyqrt

@jsyqrt jsyqrt commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

背景

心跳修复 A/B/C 此前只存在于 feat/ui-optimize-0923 工作树(从未进入任何提交),一旦后续重构 1-4 从 main 切分支即丢失。本次把它们从工作树抢救入库(首席科学家复核 tsk_805fb⬤ 时指出)。

内容

A. 风暴回路(agent-dirty-reconciler)

  • 新增 MAX_TRIGGER_HEARTBEAT_ATTEMPTS=3:连续 N 次 trigger-heartbeat 仍不脱离 stuck-busy → 停止自动兜底、升级 human-review
  • 仅当 agent 真正脱离 processing-like 才释放重试状态(修复宽限期误释放导致的立即重触发)
  • 回归测试:stuck-working + 心跳宽限窗口,断言无 <RETRY_AFTER_MS 重复触发

B. lastHeartbeat 落库接线

  • agent.ts 三处心跳落点 → notifyStateChange();stateChangeCallback payload 补 lastHeartbeat
  • cli start.ts → SqliteAgentRepo.updateLastHeartbeat;sqlite-storage.ts 新增 updateLastHeartbeat

C. 心跳能力放开(reflex → converse)

  • scenarioToPack('heartbeat') → 'converse';移除 reflex 白名单锁死,边界由 HEARTBEAT.md + 间隔承担
  • 提示改 full session capability + 间隔调整需先征询人类

D(clamp 5min–24h)已在 main,非本次范围。

验证

  • agent-dirty-reconciler.test.ts 7/7 ✅
  • capability-packs.test.ts 10/10 ✅
  • 首席科学家复核自行重跑一致(7/7 + 1197/1197 + 10/10 + 386/386 + tsc exit 0)
  • main 上 cherry-pick 后测试复跑全绿

仓库

  • 对应验收任务:tsk_805fb23b7ca32ad65eb19a64(已 completed)
  • 改动仅 9 个文件,121 insertions / 24 deletions

从 feat/ui-optimize-0923 工作树抢救入库(此前从未进入任何提交,重构从 main 切分支会丢失):

A. 风暴回路(agent-dirty-reconciler):
- 新增 MAX_TRIGGER_HEARTBEAT_ATTEMPTS=3,连续 N 次 trigger-heartbeat 仍未脱离 stuck-busy 即停止自动兜底、升级 human-review(杜绝每 2 分钟一次的心跳风暴反馈回路)
- 仅当 agent 真正脱离 processing-like 才释放重试状态(修复宽限期内误释放导致的立即重触发)
- 附回归测试:stuck-working + 心跳宽限窗口场景,断言无 <RETRY_AFTER_MS 重复触发、连续 N 次升级 human-review、恢复 idle 后 key 释放

B. lastHeartbeat 落库接线:
- agent.ts 三处心跳落点(L8866/8912/9103)→ notifyStateChange(),心跳是存活证明
- stateChangeCallback payload 补 lastHeartbeat 字段(agent.ts/agent-manager.ts)
- cli start.ts stateChangeHandler → SqliteAgentRepo.updateLastHeartbeat
- sqlite-storage.ts 新增 updateLastHeartbeat(UPDATE agents SET last_heartbeat)

C. 心跳能力放开(reflex → converse):
- capability-packs.ts scenarioToPack('heartbeat') → 'converse'(心跳与普通 session 同级工具集,边界由 HEARTBEAT.md + 间隔承担)
- agent.ts/context-engine.ts 移除 reflex 白名单锁死(去 getReflexAllowlist/HEARTBEAT_ALLOWED_TOOLS),提示改为 full session capability + 间隔调整需先征询人类
- capability-packs.test.ts 断言更新

D(clamp 5min–24h)已在 main(deep-sleep.ts/shared limits),不在本次提交。

测试:agent-dirty-reconciler 7/7 + capability-packs 10/10 通过(与首席科学家复核一致)
Fix C 将心跳从 reflex 白名单放开为 full session capability(与普通 session 同级),
但 context-scenario-matrix / prompt-profiles 两处既有测试仍断言旧提示文本
('reflex pack only' / 'Do **not** call 'task_create'),入库时未跑全量回归遗漏,
由 PR #332 CI(backend-coverage/quality)兜出。

按新期望行为更新断言:
- 心跳提示应含 'full session capability',不再含 'reflex pack only' / 禁 tool 集文本
- 其余约束(HEARTBEAT_OK、无 Self-Evolution、无显式任务创建鼓励)保持不变
@jsyqrt
jsyqrt merged commit bc6f120 into main Sep 25, 2026
2 checks passed
@jsyqrt
jsyqrt deleted the hotfix/context-heartbeat-abc branch September 25, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant