Closed
Description
总览:#180
代码依据
argi/argi-agent-framework/src/main/java/io/github/agentic/ai/graph/agent/hook/InterruptionHook.java
Line 70 in f45b2cf
| return CompletableFuture.completedFuture(Map.of()); |
问题与验收
InterruptionHook.apply 先 remove(INTERRUPTION_FEEDBACK_KEY),随后检查最后的 assistant 消息是否仍含工具调用;此时直接返回空更新,已移除的反馈没有进入消息状态。输入类型不合法等分支也需明确拒绝或保留策略。
范围与验收
- 用最后一条 assistant 含 tool calls、已有待处理反馈的场景复现;当次无法处理时不静默丢弃,后续可处理阶段按约定消费。
- 明确反馈的接收、暂存、认领、提交和拒绝时机;对格式不合法反馈给出可观察结果,不默认永远重放。
- 用可控并发测试验证消费与新反馈写入交错不覆盖/删除较新反馈;先定义单槽最新值与消息队列的现有兼容语义,不未经论证改为无限队列。
- 同一已消费反馈不重复应用,工具结果关联和消息顺序保持正确,复用现有 InterruptionHook 测试。
- 检查 ReactAgent.threadIdStateMap 的终态/会话释放清理:消费后空项目前未见回收;设计不会与新写入竞争的有界保留或显式释放方式。若需要独立生命周期 API,另拆实现任务并回链,不阻塞反馈丢失修复。
- 与 [P2B][T23] 定义持久化审批与幂等 resume 的 HITL 集成契约 #130 的持久化审批/HITL 契约区分,本单解决当前进程内反馈路径,不宣称提供跨进程审批。
关联证据:ReactAgent.updateAgentState/getThreadState 以 threadId 缓存反馈,迁移需保持已有身份边界并复用 #203 的状态所有权决策。
验证与兼容约束
Core 基线 f45b2cf。当前为静态代码分析,尚未运行本单针对性复现。先补有意义的行为测试,优先局部修复;公共 API/输出/调度语义变化需说明收益、影响、兼容替代、迁移成本及目标版本。修复不等待 Agent/Workflow/Loop 全局重构。
Metadata
Metadata
Assignees
Labels
No labels
Activity
fix(agent): keep interruption feedback until it can be applied (Fixes a…