butler/tools/tool_implicit_context_ops.py
Rama main · réplica de lectura del repositorio original.
"""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 "")