Migration from Docker to Standalone Python Server (#73)

* Migration from docker to standalone server
Migration handling
Fixed tests
Use simpler in-memory storage
Support for concurrent logging to disk
Simplified direct connections to localhost

* Migration from docker / redis to standalone script
Updated tests
Updated run script
Fixed requirements
Use dotenv
Ask if user would like to install MCP in Claude Desktop once
Updated docs

* More cleanup and references to docker removed

* Cleanup

* Comments

* Fixed tests

* Fix GitHub Actions workflow for standalone Python architecture

- Install requirements-dev.txt for pytest and testing dependencies
- Remove Docker setup from simulation tests (now standalone)
- Simplify linting job to use requirements-dev.txt
- Update simulation tests to run directly without Docker

Fixes unit test failures in CI due to missing pytest dependency.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove simulation tests from GitHub Actions

- Removed simulation-tests job that makes real API calls
- Keep only unit tests (mocked, no API costs) and linting
- Simulation tests should be run manually with real API keys
- Reduces CI costs and complexity

GitHub Actions now only runs:
- Unit tests (569 tests, all mocked)
- Code quality checks (ruff, black)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fixed tests

* Fixed tests

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Beehive Innovations
2025-06-18 23:41:22 +04:00
committed by GitHub
parent 9d72545ecd
commit 4151c3c3a5
121 changed files with 2842 additions and 3168 deletions

View File

@@ -6,10 +6,10 @@ Tests comprehensive cross-tool continuation scenarios to ensure
conversation context is maintained when switching between different tools.
"""
from .base_test import BaseSimulatorTest
from .conversation_base_test import ConversationBaseTest
class CrossToolContinuationTest(BaseSimulatorTest):
class CrossToolContinuationTest(ConversationBaseTest):
"""Test comprehensive cross-tool continuation scenarios"""
@property
@@ -25,8 +25,8 @@ class CrossToolContinuationTest(BaseSimulatorTest):
try:
self.logger.info("🔧 Test: Cross-tool continuation scenarios")
# Setup test files
self.setup_test_files()
# Setup test environment for conversation testing
self.setUp()
success_count = 0
total_scenarios = 3
@@ -62,7 +62,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
self.logger.info(" 1: Testing chat -> thinkdeep -> codereview")
# Start with chat
chat_response, chat_id = self.call_mcp_tool(
chat_response, chat_id = self.call_mcp_tool_direct(
"chat",
{
"prompt": "Please use low thinking mode. Look at this Python code and tell me what you think about it",
@@ -76,7 +76,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
return False
# Continue with thinkdeep
thinkdeep_response, _ = self.call_mcp_tool(
thinkdeep_response, _ = self.call_mcp_tool_direct(
"thinkdeep",
{
"prompt": "Please use low thinking mode. Think deeply about potential performance issues in this code",
@@ -91,7 +91,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
return False
# Continue with codereview
codereview_response, _ = self.call_mcp_tool(
codereview_response, _ = self.call_mcp_tool_direct(
"codereview",
{
"files": [self.test_files["python"]], # Same file should be deduplicated
@@ -118,8 +118,13 @@ class CrossToolContinuationTest(BaseSimulatorTest):
self.logger.info(" 2: Testing analyze -> debug -> thinkdeep")
# Start with analyze
analyze_response, analyze_id = self.call_mcp_tool(
"analyze", {"files": [self.test_files["python"]], "analysis_type": "code_quality", "model": "flash"}
analyze_response, analyze_id = self.call_mcp_tool_direct(
"analyze",
{
"files": [self.test_files["python"]],
"prompt": "Analyze this code for quality and performance issues",
"model": "flash",
},
)
if not analyze_response or not analyze_id:
@@ -127,7 +132,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
return False
# Continue with debug
debug_response, _ = self.call_mcp_tool(
debug_response, _ = self.call_mcp_tool_direct(
"debug",
{
"files": [self.test_files["python"]], # Same file should be deduplicated
@@ -142,7 +147,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
return False
# Continue with thinkdeep
final_response, _ = self.call_mcp_tool(
final_response, _ = self.call_mcp_tool_direct(
"thinkdeep",
{
"prompt": "Please use low thinking mode. Think deeply about the architectural implications of the issues we've found",
@@ -169,7 +174,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
self.logger.info(" 3: Testing multi-file cross-tool continuation")
# Start with both files
multi_response, multi_id = self.call_mcp_tool(
multi_response, multi_id = self.call_mcp_tool_direct(
"chat",
{
"prompt": "Please use low thinking mode. Analyze both the Python code and configuration file",
@@ -183,7 +188,7 @@ class CrossToolContinuationTest(BaseSimulatorTest):
return False
# Switch to codereview with same files (should use conversation history)
multi_review, _ = self.call_mcp_tool(
multi_review, _ = self.call_mcp_tool_direct(
"codereview",
{
"files": [self.test_files["python"], self.test_files["config"]], # Same files