Files
strix/strix/tools/load_skill/load_skill_actions.py
2026-03-19 16:47:29 -07:00

72 lines
2.6 KiB
Python

from typing import Any
from strix.tools.registry import register_tool
@register_tool(sandbox_execution=False)
def load_skill(agent_state: Any, skills: str) -> dict[str, Any]:
try:
from strix.skills import parse_skill_list, validate_requested_skills
requested_skills = parse_skill_list(skills)
if not requested_skills:
return {
"success": False,
"error": "No skills provided. Pass one or more comma-separated skill names.",
"requested_skills": [],
}
validation_error = validate_requested_skills(requested_skills)
if validation_error:
return {
"success": False,
"error": validation_error,
"requested_skills": requested_skills,
"loaded_skills": [],
}
from strix.tools.agents_graph.agents_graph_actions import _agent_instances
current_agent = _agent_instances.get(agent_state.agent_id)
if current_agent is None or not hasattr(current_agent, "llm"):
return {
"success": False,
"error": (
"Could not find running agent instance for runtime skill loading. "
"Try again in the current active agent."
),
"requested_skills": requested_skills,
"loaded_skills": [],
}
newly_loaded = current_agent.llm.add_skills(requested_skills)
already_loaded = [skill for skill in requested_skills if skill not in newly_loaded]
prior = agent_state.context.get("loaded_skills", [])
if not isinstance(prior, list):
prior = []
merged_skills = sorted(set(prior).union(requested_skills))
agent_state.update_context("loaded_skills", merged_skills)
except Exception as e: # noqa: BLE001
fallback_requested_skills = (
requested_skills
if "requested_skills" in locals()
else [s.strip() for s in skills.split(",") if s.strip()]
)
return {
"success": False,
"error": f"Failed to load skill(s): {e!s}",
"requested_skills": fallback_requested_skills,
"loaded_skills": [],
}
else:
return {
"success": True,
"requested_skills": requested_skills,
"loaded_skills": requested_skills,
"newly_loaded_skills": newly_loaded,
"already_loaded_skills": already_loaded,
"message": "Skills loaded into this agent prompt context.",
}