Ctrl K
ComunidadGuías…

butler/tools/terminal_danger_ops.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""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)