Ctrl K
ComunidadGuías…

butler/tools/tool_implicit_context_ops.py

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

Archivo original ↗Preguntar a KiBot
"""Implicit tool context best-effort helpers (P0-A)."""

from __future__ import annotations

from pathlib import Path

from butler.core.best_effort import safe_best_effort


def resolve_project_workspace_safe() -> Path | None:
    def _run() -> Path:
        from butler.execution_context import get_current_orchestrator, get_current_session_key

        orch = get_current_orchestrator()
        if orch is None:
            raise ValueError("orchestrator unavailable")
        pm = getattr(orch, "project_manager", None)
        if pm is None:
            raise ValueError("project manager unavailable")
        proj = pm.get_current(session_key=str(get_current_session_key() or ""))
        if proj is None:
            raise ValueError("no current project")
        return Path(proj.workspace).expanduser().resolve()

    result = safe_best_effort(
        _run,
        label="tool_implicit_context.workspace",
        default=None,
    )
    return result if isinstance(result, Path) else None


def current_session_key_safe() -> str:
    def _run() -> str:
        from butler.execution_context import get_current_session_key

        return str(get_current_session_key() or "").strip()

    result = safe_best_effort(
        _run,
        label="tool_implicit_context.session_key",
        default="",
    )
    return str(result or "")


def current_workflow_step_safe() -> str:
    def _run() -> str:
        from butler.execution_context import get_current_workflow_step

        return str(get_current_workflow_step() or "").strip()

    result = safe_best_effort(
        _run,
        label="tool_implicit_context.workflow_step",
        default="",
    )
    return str(result or "")