Conversation
- Created new StrReplaceEditorTool under openhands/runtime/tools/str_replace_editor.py - Integrated OHEditor from openhands-aci for core file editing functionality - Added complete tool schema and descriptions from OpenHands str_replace_editor.py - Implemented all commands: view, create, str_replace, insert, undo_edit - Added proper package structure with __init__.py files - Tool successfully tested with file operations Co-authored-by: openhands <openhands@all-hands.dev>
- Refactored StrReplaceEditorAction from ActionBase inheritance to simple Pydantic BaseModel with Field descriptions - Removed StrReplaceEditorObservation class entirely - Updated _execute_str_replace_editor function to return dict directly instead of observation object - Updated tool creation to use StrReplaceEditorAction.model_json_schema() for input_schema - Removed old STR_REPLACE_EDITOR_SCHEMA dictionary (no longer needed) - Simplified architecture: single Pydantic schema class with Field descriptions, direct dict return from execute function, JSON schema generation from Pydantic model - All functionality tested and working correctly Co-authored-by: openhands <openhands@all-hands.dev>
…comprehensive tests - Copied full OHEditor implementation from openhands-aci into str_replace_editor.py - Added all necessary dependencies (binaryornot, openhands-aci modules) - Updated _execute_str_replace_editor to use local OHEditor class - Added comprehensive test suite from openhands-aci (37 tests for OHEditor) - Created integration tests for StrReplaceEditorTool (6 tests) - Added pytest as dev dependency and openhands-aci as dependency - All 43 tests passing successfully - Implementation now self-contained with full file editing capabilities Co-authored-by: openhands <openhands@all-hands.dev>
…ibility - Updated function signature to accept both dict and StrReplaceEditorAction inputs - Added automatic conversion from dict to StrReplaceEditorAction when needed - Ensures compatibility with Tool.execute_fn interface that passes dict parameters - All 43 tests still passing with enhanced flexibility Co-authored-by: openhands <openhands@all-hands.dev>
- Updated all test files to use new str_replace_editor implementation - Fixed imports from openhands_aci.editor to openhands.core.runtime.tools.str_replace_editor - Updated tests to work with new StrReplaceEditorObservation format instead of XML-wrapped JSON - Consolidated shared logic in conftest.py with helper functions - Fixed @with_encoding decorator to check method signatures before adding encoding parameter - Created missing __init__.py files for proper Python module structure - Updated all test assertions to work with new result format (result.output, result.error) - Added psutil dependency for memory usage testing - Fixed test dependencies by creating temporary files instead of relying on external data - Updated shell utils test to use 'python' instead of 'whoami' for tool installation check Test Results: - 117/118 tests passing (99.2% success rate) - All functional tests working correctly - Only memory leak test failing due to performance characteristics - All core functionality validated and working Co-authored-by: openhands <openhands@all-hands.dev>
- Add null checks for result.error and result.output before using 'in' operator - Fix variable scope issue in test_memory_usage.py - All pre-commit hooks now pass for str_replace_editor tests - Maintain 117/118 tests passing (99.2% success rate) Co-authored-by: openhands <openhands@all-hands.dev>
jpshackelford
pushed a commit
that referenced
this pull request
Jan 20, 2026
- #2 & #3: Remove repo_path support for local plugin sources - Raises PluginFetchError if repo_path is used with local sources - Users should specify the full path directly - Updated documentation and tests accordingly - #4: Fix fragile hardcoded hook field names in loader.py - Renamed _VALID_HOOK_FIELDS to public HOOK_EVENT_FIELDS in config.py - Exported from hooks module __init__.py - Import and use in loader.py instead of duplicating the list - #5: Remove redundant mcpServers initialization in merge_mcp_configs - The .get(..., {}) already handles the missing key case - Update tests to match new error message format (from earlier fix) Co-authored-by: openhands <openhands@all-hands.dev>
This was referenced Jan 29, 2026
xingyaoww
pushed a commit
that referenced
this pull request
Feb 9, 2026
This commit addresses the critical issues raised in the code review: ## Critical Issue #1: Data Structure Design Flaw - Refactored AgentState to AgentStateRegistry using dict[str, Any] pattern - Provides loosely-coupled storage for agent-specific state - Agents store state using string keys instead of typed fields - Maintains backward compatibility with AgentState alias ## Critical Issue #2: Hidden State Mutation - Fixed _check_iterative_refinement to only increment iteration counter when refinement will actually continue - State mutation now happens AFTER validation checks pass - Function name now accurately reflects its behavior ## Critical Issue #3: Missing Tests - Added comprehensive tests for AgentStateRegistry (14 tests) - Added tests for IterativeRefinementConfig validation (4 tests) - Added tests for _check_iterative_refinement logic (12 tests) - Tests cover edge cases: max iterations, threshold boundaries, etc. ## Suggestion #5: Unnecessary Forward Reference - Removed quotes from LLM type hint in example ## Suggestion #7: Unused Method - Removed reset_iterative_refinement() as part of registry refactor ## Note on Issue #4 (FinishTool Special Case) The suggestion to move iterative refinement to the conversation layer is a valid architectural improvement but requires more significant changes. This is deferred to a future PR to keep this change focused. Co-authored-by: openhands <openhands@all-hands.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.