Skip to content

Conversation

amanape
Copy link
Member

@amanape amanape commented Oct 9, 2025

  • This change is worth documenting at https://docs.all-hands.dev/
  • Include this change in the Release Notes. If checked, you must provide an end-user friendly description for your change below

End-user friendly description of the problem this fixes or functionality this introduces.


Summarize what the PR does, explaining any non-trivial design decisions.


Link of any specific issues this addresses:


To run this PR locally, use the following command:

GUI with Docker:

docker run -it --rm   -p 3000:3000   -v /var/run/docker.sock:/var/run/docker.sock   --add-host host.docker.internal:host-gateway   -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:7816f7c-nikolaik   --name openhands-app-7816f7c   docker.all-hands.dev/all-hands-ai/openhands:7816f7c

CLI with uvx:

uvx --python 3.12 --from git+https://github.com/All-Hands-AI/OpenHands@APP-47/v1-component-types#subdirectory=openhands-cli openhands

amanape and others added 13 commits October 2, 2025 20:53
- Implement basic useWebSocket hook with connection management
- Add comprehensive test suite using MSW for WebSocket mocking
- Support connection establishment, message handling, and error management
- Include state management for isConnected, messages, lastMessage, and error
- Handle both connection closure errors (onclose) and protocol errors (onerror)
- Follow TDD principles with failing tests first, then minimal implementation

Tests implemented:
- ✅ should establish a WebSocket connection
- ✅ should handle incoming messages correctly
- ✅ should handle connection errors gracefully
- 🔄 should close the WebSocket connection on unmount (todo)
- 🔄 should close the WebSocket when called explicitly (todo)

Co-authored-by: openhands <[email protected]>
- Convert function declaration to arrow function syntax for consistency
- Remove unused todo test for explicit close functionality
- All 4 tests still passing after refactor:
  ✅ should establish a WebSocket connection
  ✅ should handle incoming messages correctly
  ✅ should handle connection errors gracefully
  ✅ should close the WebSocket connection on unmount

Co-authored-by: openhands <[email protected]>
- Add optional second parameter for query parameters configuration
- Support Record<string, string> type for query parameters
- Use URLSearchParams for proper URL encoding and building
- Maintain full backward compatibility with existing usage
- Update useEffect dependencies to track options changes

Usage:
  useWebSocket('ws://example.com/ws', {
    queryParams: { token: 'abc123', userId: 'user456' }
  })
  // Results in: ws://example.com/ws?token=abc123&userId=user456

Tests: ✅ 5/5 passing
- ✅ should establish a WebSocket connection
- ✅ should handle incoming messages correctly
- ✅ should handle connection errors gracefully
- ✅ should close the WebSocket connection on unmount
- ✅ should support query parameters in WebSocket URL

Co-authored-by: openhands <[email protected]>
- Add onOpen, onClose, onMessage, and onError callback options
- Implement TDD approach with comprehensive test coverage
- Support custom event handlers while maintaining existing functionality
- Call onError for both onerror events and error closures (non-1000 codes)
- All tests passing with MSW WebSocket mocking

Co-authored-by: openhands <[email protected]>
- Add sendMessage function to send data through WebSocket connection
- Implement proper connection state checking (only send when OPEN)
- Support all WebSocket data types (string, ArrayBufferLike, Blob, ArrayBufferView)
- Add comprehensive test coverage for both connected and disconnected states
- Use React.useCallback for performance optimization
- Follow TDD approach with failing tests first

Co-authored-by: openhands <[email protected]>
@amanape amanape self-assigned this Oct 9, 2025
@amanape amanape changed the title App 47/v1 component types V1 component types Oct 9, 2025
@amanape amanape changed the base branch from main to v1-ws-events October 9, 2025 19:14
Base automatically changed from v1-ws-events to main October 10, 2025 12:29
@hieptl hieptl self-assigned this Oct 10, 2025
Copy link
Contributor

Coverage report

This PR does not seem to contain any modification to coverable code.

@amanape amanape closed this Oct 10, 2025
@amanape amanape reopened this Oct 10, 2025
Copy link

openhands-ai bot commented Oct 11, 2025

Looks like there are a few issues preventing this PR from being merged!

  • GitHub Actions are failing:
    • Run Frontend Unit Tests
    • Lint

If you'd like me to help, just leave a comment, like

@OpenHands please fix the failing actions on PR #11305 at branch `APP-47/v1-component-types`

Feel free to include any additional details that might help me get this PR into a better state.

You can manage your notification settings

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants