plan_approval_response 不会唤醒 idle teammate

Abierto Apto para principiantes
#455 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 8 días

Nadie ha tomado este issue todavía.

  • #499 de @osyven — cerrado sin fusionar

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
python

Línea de trabajo

Lee el idle loop y handle_inbox_message() en s16_team_protocols/code.py y, después, reproduce el flujo de submit_plan y review_plan descrito en el issue. Se considera terminado cuando un plan_approval_response despierta al compañero de equipo, vuelve al bucle externo y le permite llamar de nuevo al LLM sin añadir un mensaje de resultado de herramienta vacío.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

问题

在 s16_team_protocols/code.py 中,teammate 的 run()进入 idle loop 后,如果收到 plan_approval_response,只会把审批结果追加到 messages,但不会跳出 idle loop。

结果是:Lead 调用 review_plan() 批准或拒绝计划后,teammate 不会立刻继续执行。它会继续等待下一条消息,除非Lead 额外发送一条普通 message。

复现流程

  1. Lead spawn 一个 teammate。
  2. teammate 调用 submit_plan。
  3. Lead 调用 review_plan(request_id, approve=True)。
  4. teammate 收到 plan_approval_response。
  5. teammate 将 [Plan approved] Proceed with the task.
    写入 messages。
  6. teammate 继续停留在 idle loop,不会重新调用 LLM。

原因

idle loop 中只有两种情况会跳出:

if shutdown_requested:
    break

if non_protocol:
    ...
    break

但 plan_approval_response 属于 protocol message:

if msg.get("type") in ("shutdown_request",
"plan_approval_response"):
    should_stop = handle_inbox_message(name, msg, messages)

handle_inbox_message() 处理 plan_approval_response 后返回False,因此:

shutdown_requested == False
non_protocol == []

最终不会触发 break。

影响

plan_approval_response 被记录到了上下文,但没有唤醒teammate。

这会导致 plan approval 协议流卡住:

submit_plan
-> Lead review_plan approve
-> teammate receives approval
-> teammate remains idle

期望行为

收到 plan_approval_response 后,teammate 应该跳出 idle loop,回到外层 while,重新调用 LLM,让模型基于批准或拒绝结果继续行动。

可能修复

让 handle_inbox_message() 对 plan_approval_response 返回一个“需要继续执行”的信号,或者在 idle loop 中单独处理:

if msg.get("type") == "plan_approval_response":
    handle_inbox_message(name, msg, messages)
    should_resume = True

然后:

if should_resume:
    break

同时建议避免 idle loop 跳出后继续追加空的 tool_resultuser message。当前代码在非 tool_use 响应后仍可能执行到:

messages.append({"role": "user", "content": results})

其中 results 可能是空列表。

Lenguaje dominante
Python
Estrellas
79.5k
Forks
12.7k
Merge medio
7 d 17 h
PR fusionados (30 d)
4

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de shareAI-lab/learn-claude-code

Todos los issues de shareAI-lab/learn-claude-code

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.