rf-mcp 0.7.0.dev2__tar.gz → 0.7.0.dev3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/PKG-INFO +1 -1
  2. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/pyproject.toml +1 -1
  3. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/core/dynamic_keyword_orchestrator.py +9 -8
  4. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/.gitignore +0 -0
  5. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/LICENSE +0 -0
  6. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/README.md +0 -0
  7. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/__init__.py +0 -0
  8. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/__init__.py +0 -0
  9. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/browser/__init__.py +0 -0
  10. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/browser/browser_library_manager.py +0 -0
  11. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/execution/__init__.py +0 -0
  12. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/execution/execution_coordinator.py +0 -0
  13. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/execution/keyword_executor.py +0 -0
  14. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/execution/locator_converter.py +0 -0
  15. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/execution/page_source_service.py +0 -0
  16. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/execution/session_manager.py +0 -0
  17. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/keyword_matcher.py +0 -0
  18. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/keyword_overrides.py +0 -0
  19. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/library_recommender.py +0 -0
  20. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/nlp_processor.py +0 -0
  21. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/state_manager.py +0 -0
  22. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/components/test_builder.py +0 -0
  23. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/config/__init__.py +0 -0
  24. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/config/library_registry.py +0 -0
  25. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/core/__init__.py +0 -0
  26. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/core/keyword_discovery.py +0 -0
  27. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/core/library_manager.py +0 -0
  28. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/core/session_manager.py +0 -0
  29. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/models/__init__.py +0 -0
  30. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/models/browser_models.py +0 -0
  31. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/models/config_models.py +0 -0
  32. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/models/execution_models.py +0 -0
  33. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/models/library_models.py +0 -0
  34. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/models/session_models.py +0 -0
  35. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/server.py +0 -0
  36. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/__init__.py +0 -0
  37. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/argument_processor.py +0 -0
  38. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/libdoc_argument_parser.py +0 -0
  39. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/library_checker.py +0 -0
  40. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/library_detector.py +0 -0
  41. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/rf_libdoc_integration.py +0 -0
  42. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/rf_native_type_converter.py +0 -0
  43. {rf_mcp-0.7.0.dev2 → rf_mcp-0.7.0.dev3}/src/robotmcp/utils/validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rf-mcp
3
- Version: 0.7.0.dev2
3
+ Version: 0.7.0.dev3
4
4
  Summary: Robot Framework MCP Server - Natural Language Test Automation Bridge
5
5
  Project-URL: Homepage, https://github.com/manykarim/rf-mcp
6
6
  Project-URL: Repository, https://github.com/manykarim/rf-mcp
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "rf-mcp"
7
- version = "0.7.0dev02"
7
+ version = "0.7.0dev03"
8
8
  description = "Robot Framework MCP Server - Natural Language Test Automation Bridge"
9
9
  authors = [{name = "Robot MCP Team"}]
10
10
  license = {text = "Apache-2.0"}
@@ -182,11 +182,11 @@ class DynamicKeywordDiscovery:
182
182
  result = method(*converted_args)
183
183
 
184
184
  logger.debug(f"RF native type conversion succeeded for {keyword_info.name}")
185
- return result
185
+ return ('executed', result) # Return tuple to indicate execution happened
186
186
 
187
187
  except ImportError as ie:
188
188
  logger.debug(f"Robot Framework type conversion not available: {ie}")
189
- return None
189
+ return ('not_available', None) # Indicate type conversion wasn't available
190
190
  except Exception as e:
191
191
  logger.debug(f"RF native type conversion failed for {keyword_info.name}: {e}")
192
192
  # Log more details for debugging
@@ -194,7 +194,8 @@ class DynamicKeywordDiscovery:
194
194
  logger.debug(f"Original args: {original_args}")
195
195
  import traceback
196
196
  logger.debug(f"Full traceback: {traceback.format_exc()}")
197
- return None
197
+ # CRITICAL: Even though execution failed, it DID execute - don't try again
198
+ raise e # Re-raise the exception instead of returning None
198
199
 
199
200
  def get_keyword_suggestions(self, keyword_name: str, limit: int = 5) -> List[str]:
200
201
  """Get keyword suggestions based on partial match."""
@@ -636,11 +637,11 @@ class DynamicKeywordDiscovery:
636
637
  if keyword_info.library in type_conversion_libraries:
637
638
  try:
638
639
  # Use Robot Framework's native type conversion system for libraries that need it
639
- result = self._execute_with_rf_type_conversion(method, keyword_info, original_args)
640
- if result is not None: # Successfully converted and executed
641
- pass # Use the result as-is
642
- else:
643
- # Fallback to our argument processing
640
+ conversion_result = self._execute_with_rf_type_conversion(method, keyword_info, original_args)
641
+ if conversion_result[0] == 'executed': # Successfully converted and executed
642
+ result = conversion_result[1] # Use the result as-is
643
+ elif conversion_result[0] == 'not_available':
644
+ # Type conversion not available, fallback to our argument processing
644
645
  parsed = self.argument_processor.parse_arguments_for_keyword(keyword_info.name, original_args, keyword_info.library)
645
646
  pos_args = parsed.positional
646
647
  kwargs = parsed.named
File without changes
File without changes
File without changes