from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from ..environment.environment import Environment class ActivateAbilityTool: name = "activate_ability" schema = { "type": "function", "function": { "name": "activate_ability", "description": "Activate one of your acquired abilities. Each ability has different effects and args.", "parameters": { "type": "object", "properties": { "ability": { "type": "string", "description": "Name of the ability to activate", }, "args": { "type": "object", "description": "Arguments for the ability (varies per ability)", }, }, "required": ["ability", "args"], }, }, } @staticmethod def run(env: Environment, aid: str, args: dict) -> str: ability_name = args.get("ability", "") ability_args = args.get("args", {}) agent = env.agents[aid] ability = agent.get_ability(ability_name) if not ability: return f"You don't have the ability '{ability_name}'" if not ability.can_use(env.turn): return f"Ability '{ability_name}' cannot be used right now (cooldown or no uses left)" from ..environment.ability_registry import ABILITY_REGISTRY ability_def = ABILITY_REGISTRY.get(ability_name) if not ability_def: return f"Unknown ability: {ability_name}" result = ability_def.handler(env, aid, ability_args) ability.use(env.turn) return result