butler/tools/delegate_subagent_ops.py
Rama main · réplica de lectura del repositorio original.
"""Delegate subagent loop best-effort helpers (P0-A)."""
from __future__ import annotations
from pathlib import Path
from butler.core.best_effort import safe_best_effort
from butler.tools.delegate_run_state import DelegateRunState
def merge_agents_md_context_safe(state: DelegateRunState) -> None:
if state.project is None:
return
def _run() -> None:
from butler.agents_md import merge_agent_md_into_context
state.context = merge_agent_md_into_context(
Path(state.project.workspace),
state.role,
state.context,
)
safe_best_effort(_run, label="delegate_subagent.agents_md", default=None)
def apply_one_tool_per_iteration_safe(state: DelegateRunState) -> None:
def _run() -> None:
from butler.delegate.policy import delegate_one_tool_per_iteration
if delegate_one_tool_per_iteration():
state.agent.config.enable_parallel_tools = False
state.agent.diagnostics["delegate_one_tool_per_iteration"] = True
safe_best_effort(_run, label="delegate_subagent.one_tool_policy", default=None)
def inject_dev_engine_prompt_safe(state: DelegateRunState) -> None:
def _run() -> None:
from butler.agent_profiles import get_dev_agent_prompt
enhanced = get_dev_agent_prompt()
if enhanced and len(enhanced) > len(state.agent.system_prompt):
state.agent.system_prompt = enhanced
safe_best_effort(_run, label="delegate_subagent.dev_prompt", default=None)