Source code for mindroot.lib.providers.missing

import os
import re
import json
import inspect
from lib.providers.commands import command_manager
from lib.plugins.mapping import get_command_plugin_mapping
import logging
logger = logging.getLogger(__name__)


[docs] async def get_missing_commands(agent_name=None, context=None): """ Identify commands that are used in agent instructions but not available in the system. Args: agent_name (str, optional): Name of the agent to check Returns: dict: Mapping of missing commands and potential plugins that provide them """ if context and not agent_name: agent_name = context.agent_name if not agent_name: return {"error": "Agent name is required"} # Load agent data try: agent_path = f"data/agents/local/{agent_name}/agent.json" if not os.path.exists(agent_path): agent_path = f"data/agents/shared/{agent_name}/agent.json" if not os.path.exists(agent_path): return {"error": f"Agent {agent_name} not found"} logger.info(f"missing commands: Loading agent data from {agent_path}") with open(agent_path, 'r') as f: agent_data = json.load(f) # Get all available commands from the provider available_commands = set(command_manager.functions.keys()) logger.info(f"Available commands: {available_commands}") # Get agent's command list agent_commands = set(agent_data.get('commands', [])) logger.info(f"Agent commands: {agent_commands}") # Find commands that are mentioned but not available missing_commands = agent_commands - available_commands logger.info(f"Missing commands: {missing_commands}") # Get command-plugin mapping command_plugin_mapping = await get_command_plugin_mapping() logger.info(f"Command-Plugin mapping: {command_plugin_mapping}") # Create result with missing commands and potential plugins result = {} for cmd in missing_commands: # If no plugins provide this command, still include it with an empty list if cmd not in command_plugin_mapping: result[cmd] = [] continue result[cmd] = command_plugin_mapping.get(cmd, []) logger.info(f"Missing commands with plugins: {result}") return result except Exception as e: return {"error": str(e)}