butler/orchestrator/loop_factory_ops.py
Rama main · réplica de lectura del repositorio original.
"""AgentLoop factory best-effort helpers (P0-A)."""
from __future__ import annotations
from typing import TYPE_CHECKING
from butler.core.best_effort import safe_best_effort
if TYPE_CHECKING:
from butler.orchestrator import ButlerOrchestrator
def apply_project_plugins_safe(orch: "ButlerOrchestrator", session_key: str) -> None:
def _run() -> None:
from butler.project.plugins import apply_project_plugins
proj = orch.project_manager.get_current(session_key=session_key)
apply_project_plugins(proj)
safe_best_effort(_run, label="loop_factory.project_plugins", default=None)
def append_plan_mode_appendix_safe(session_key: str, system_prompt: str) -> str:
def _run() -> str:
from butler.plan.mode import is_plan_mode, load_plan_mode_system_appendix
if is_plan_mode(session_key):
return str(system_prompt.rstrip() + "\n\n" + load_plan_mode_system_appendix())
return system_prompt
result = safe_best_effort(
_run,
label="loop_factory.plan_mode_appendix",
default=system_prompt,
)
return str(result) if isinstance(result, str) else system_prompt