butler/tools/terminal_danger_ops.py
Rama main · réplica de lectura del repositorio original.
"""Terminal danger check best-effort helpers (P0-A)."""
from __future__ import annotations
import logging
from pathlib import Path
from typing import Any
from butler.core.best_effort import safe_best_effort
logger = logging.getLogger(__name__)
def evaluate_execpolicy_safe(command: str) -> Any | None:
def _run() -> Any:
from butler.execpolicy import evaluate_command
from butler.execution_context import get_current_orchestrator
workspace: Path | None = None
orch = get_current_orchestrator()
if orch is not None and getattr(orch, "project_manager", None):
proj = orch.project_manager.get_current()
if proj is not None:
workspace = Path(getattr(proj, "workspace", "") or "")
return evaluate_command(command, workspace=workspace)
return safe_best_effort(
_run,
label="terminal_danger.execpolicy",
default=None,
)
def is_terminal_pattern_approved_safe(session_key: str, pattern_name: str) -> bool:
def _run() -> bool:
from butler.tools.terminal_pattern_approval import is_pattern_approved
return bool(is_pattern_approved(session_key, pattern_name))
result = safe_best_effort(
_run,
label="terminal_danger.pattern_approval",
default=False,
)
if result is None:
logger.debug("terminal pattern approval lookup skipped")
return bool(result)