Ctrl K
ComunidadGuías…

butler/tools/workflow_tools.py

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

Archivo original ↗Preguntar a KiBot
"""Workflow listing tool (B9 workflow-as-tool complement)."""

from __future__ import annotations

import json
from typing import Any, Callable


def tool_list_workflows(**_: Any) -> str:
    from butler.execution_context import get_current_orchestrator, get_current_session_key

    orch = get_current_orchestrator()
    if orch is None:
        return json.dumps({"error": "no orchestrator context"}, ensure_ascii=False)
    pm = getattr(orch, "project_manager", None)
    if pm is None:
        return json.dumps({"error": "no project manager"}, ensure_ascii=False)
    project = pm.get_current(session_key=str(get_current_session_key() or ""))
    from butler.workflows.loader import list_workflows_for_project

    workflows = list_workflows_for_project(project)
    rows = [
        {
            "name": wf.name,
            "description": wf.description,
            "runnable": wf.runnable,
            "steps": len(wf.steps),
            "step_ids": [s.id for s in wf.steps],
        }
        for wf in workflows
    ]
    return json.dumps({"workflows": rows, "count": len(rows)}, ensure_ascii=False)


def register_workflow_tools(register_fn: Callable[..., None]) -> None:
    register_fn(
        name="list_workflows",
        description=(
            "List workflows declared for the current project (project.yaml + "
            ".butler/workflows/). Use before run_workflow."
        ),
        schema={"type": "object", "properties": {}},
        handler=lambda _args: tool_list_workflows(),
        toolset="delegation",
    )