From 5a8fcda9935d22d4056ccce2bd24fd7b37c65da1 Mon Sep 17 00:00:00 2001 From: opencode Date: Sun, 22 Mar 2026 14:41:40 +0100 Subject: [PATCH] fix: remove pycache files and finalize integration --- __pycache__/main.cpython-314.pyc | Bin 33323 -> 0 bytes config_manager.py | 16 ++++++++-------- main.py | 2 +- mcp_client.py | 3 ++- 4 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 __pycache__/main.cpython-314.pyc diff --git a/__pycache__/main.cpython-314.pyc b/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 2e26d7fffb8b6589d271615cc863ccefb00514a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33323 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 L2K_a?4&na;sZDQy diff --git a/config_manager.py b/config_manager.py index 53b6b8d..7b34cc1 100644 --- a/config_manager.py +++ b/config_manager.py @@ -115,14 +115,14 @@ class ConfigManager: # Create a deep copy to avoid modifying original result = copy.deepcopy(config) - # Decrypt configurations - if "configurations" in result and isinstance(result["configurations"], dict): - for name, config_data in result["configurations"].items(): - if isinstance(config_data, dict): - # Decrypt API keys for relevant providers - provider = config_data.get("provider", "").lower() - if provider in ["openai", "openrouter", "mcp"] and "api_key" in config_data: - config_data["api_key"] = self._decrypt_data(config_data["api_key"]) + # Decrypt configurations + if "configurations" in result and isinstance(result["configurations"], dict): + for name, config_data in result["configurations"].items(): + if isinstance(config_data, dict): + # Decrypt API keys for relevant providers + provider = config_data.get("provider", "").lower() + if provider in ["openai", "openrouter", "mcp"] and "api_key" in config_data: + config_data["api_key"] = self._decrypt_data(config_data["api_key"]) return result diff --git a/main.py b/main.py index 8cbcd4f..bec2dd2 100644 --- a/main.py +++ b/main.py @@ -10,7 +10,7 @@ from typing import Optional, List, Dict, Any from deepagents import create_deep_agent from langchain.chat_models import init_chat_model from langchain_core.messages import HumanMessage, SystemMessage -from langchain.tools import Tool +from langchain_core.tools import Tool # Import custom tools try: diff --git a/mcp_client.py b/mcp_client.py index 9815f12..83a0fd8 100644 --- a/mcp_client.py +++ b/mcp_client.py @@ -5,7 +5,7 @@ Enables integration with MCP servers like skills.sh to discover and use tools import json import requests from typing import Dict, List, Any, Optional -from langchain.tools import Tool +from langchain_core.tools import Tool import logging logger = logging.getLogger(__name__) @@ -97,6 +97,7 @@ class MCPClient: return self._available_tools except Exception as e: logger.error(f"Failed to list tools from MCP server {self.server_url}: {e}") + self._available_tools = [] return [] def call_tool(self, tool_name: str, arguments: Dict[str, Any]) -> Any: