-
Notifications
You must be signed in to change notification settings - Fork 8
feat: CI improvements and web UI implementation #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
MBanucu
wants to merge
306
commits into
shekohex:main
Choose a base branch
from
MBanucu:fix-ci-shekohex
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+11,318
−1,053
Conversation
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
…ce optimizations - Add CodeQL security scanning for code vulnerability detection - Implement dependency review for PR security checks - Add Bun dependency caching to reduce CI execution time - Update release workflow to use modern GitHub CLI (gh release create) - Improve CI permissions for security scanning Enhances CI/CD security, performance, and modernizes release automation
- Remove unused Vitest configuration and test setup files - Clean up Vitest dependencies from package.json (no longer needed) - Fix Prettier formatting issues causing ESLint failures - Remove test:coverage script that depended on removed Vitest BREAKING CHANGE: Removes Vitest testing framework (replaced by Playwright)
- Add comprehensive REST API documentation for web server endpoints - Include WebSocket usage examples for real-time streaming - Remove console.log from main.tsx, replace with Pino logger - Remove outdated historical cleanup reports - Update README with complete API reference Improves documentation completeness and code consistency
- Remove unnecessary escape characters in regex patterns - Add browser globals (localStorage, performance) to ESLint config - Fix React setState synchronous call in useEffect by removing problematic effect - Update CodeQL action from v3 to v4 to resolve deprecation warnings - Update AGENTS.md dependency versions to match package.json (^1.1.31) - Run Prettier to fix all formatting issues CI pipeline should now pass with 0 errors (42 warnings remain but don't block)
- Update package.json test script to explicitly exclude Playwright test files - Configure bunfig.toml to exclude tests/ directory from Bun test scanning - Ensure unit tests run cleanly without Playwright framework interference CI should now pass unit tests without Playwright conflicts
…very - Rename tests/ directory to e2e/ to avoid naming conflicts - Rename Playwright test files from .spec.ts to .pw.ts - Update Playwright config to use e2e/ directory and .pw.ts pattern - Configure Bun test root to only scan test/ directory - Update package.json scripts to exclude e2e/ directory Fixes 'Playwright Test did not expect test.describe() to be called here' errors
- Remove redundant test:unit script (merged with test) - Rename test:integration to test:e2e for consistency - Add new development scripts: test:watch, typecheck:watch, quality, ci - Consolidate build scripts to always include type checking - Rename dev:backend to dev:server for clarity - Update test:all to use new script names Improves developer experience with watch modes and consolidated workflows
- Add build step to CI workflow before running tests to generate dist assets - Fix logger imports and API usage in web components to work with Pino in browser - Update test cases to use longer-running commands to avoid race conditions with session lifecycle - Add documentation for building OpenCode plugins
Add test to verify behavior when sending input to a PTY session running a sleep command. This tests edge case handling for processes that are blocked/sleeping. Test flow: 1. Spawn session with 'sleep 10' command 2. Wait for session to reach 'running' status 3. Send input to the sleeping session 4. Verify input is accepted (success response) 5. Kill session to clean up This ensures PTY handles input to non-interactive processes gracefully and doesn't deadlock or error.
Fix e2e test timeouts by reading the actual server URL from port file instead of calculating ports. The server uses port: 0 (random port), so tests need to read the actual assigned port from the file that test-web-server.ts writes. Changes: - fixtures.ts: Read port file and parse actual server URL instead of calculating hardcoded ports (8877 + workerIndex) - test-web-server.ts: Write server.url.href instead of server.port (server.port is undefined when using port: 0) This resolves "Test timeout of 15000ms exceeded while setting up server" error by connecting to the correct random port that server is actually listening on.
Increase timeout for session list selector from 5s to 10s to allow more time for UI to update after session creation via POST request. Also add wait timeout after clearing sessions to ensure UI reflects the cleared state before creating new session. This fixes: "Timeout 5000ms exceeded" when waiting for .session-item selector to appear after creating test session.
Add console.log statements to analyze session state and WebSocket behavior: - Log when server port file is read and server URL is parsed - Log WebSocket 'subscribed' event to verify timing - Log session creation responses and JSON Fix session management race conditions: - Read actual server port from file instead of calculating ports - Delete port file before spawning server to prevent stale state - Wait for WebSocket 'subscribed' message before checking UI - Use DELETE method for clear sessions endpoint These changes help debug why tests fail to find the expected session and assert on wrong session titles.
Send both 'subscribe' and 'session_list' WebSocket messages after creating a test session to ensure UI receives session list update before the test waits for it. This fixes race condition where: - Test waits for .session-item to appear - UI hasn't received updated session list yet - Timeout occurs after 10 seconds Changes: - Send 'session_list' request after 'subscribe' to trigger UI update - Wait for both 'subscribed' AND 'session_list' events before checking UI for session list
Expose global subscription function for E2E tests to use the application's existing WebSocket connection instead of creating a separate connection. Changes: - useWebSocket.ts: Add subscribeToSessionUpdates() global function - pty-live-streaming.pw.ts: Remove separate WebSocket creation - pty-live-streaming.pw.ts: Use global subscribeToSessionUpdates() to receive session list updates - pty-live-streaming.pw.ts: Add PTYSessionInfo import This ensures test receives session updates from server's sessions:update broadcasts through the app's WebSocket connection, integrating with the UI update flow.
- Add onSessionUpdate callback to useWebSocket hook for handling session_update messages from server - Implement real-time session updates in UI (status, line count, etc.) - Add separate counters for raw_data vs session_update messages - Add periodic session list sync every 10 seconds for consistency - Fix E2E test by removing non-existent subscribeToSessionUpdates dependency and using correct message counter patterns This enables live updates of session information in the sidebar without full refreshes, improving user experience and fixing test reliability.
- Remove 'should load historical buffered output' test that was incorrectly expecting sessions without creating them - Clean up unused imports and add missing expect import - Keep functional tests for historical buffer and WebSocket streaming This fixes test failures and ensures reliable E2E test execution.
Update e2e tests to use echo commands instead of interactive bash for better reliability. Add global setup to run build before tests, removing it from the test script. Improve terminal renderer with local echo for immediate visual feedback. Fix various test selectors and cleanup obsolete code.
Fix data structure mismatch where client accessed 'sessionId' instead of 'session.id' in WebSocket raw_data messages, preventing counter updates. - Fix property access from data.sessionId to data.session.id - Add proper TypeScript types for WebSocket messages to prevent future bugs - Add regression test to verify counter increments on xterm input - Improve type safety with discriminated unions for message handling
Remove local echo from TerminalRenderer that was causing characters to appear twice when typing in interactive bash sessions. The PTY process (bash -i) already echoes input back, making the local echo redundant and causing double character display. - Remove term.write(data) from input handling - PTY echo now provides all visual feedback - Fixes double character issue in terminal input - Maintains standard Unix terminal behavior
… hierarchy Remove unnecessary BaseTerminalRenderer abstract class and RawTerminalRenderer subclass that were designed for extensibility but only had one implementation. Simplify to a single RawTerminal class component while preserving all functionality. - Remove BaseTerminalRenderer abstract class (110 lines) - Remove RawTerminalRenderer subclass (11 lines) - Remove interface inheritance complexity - Reduce code from 147 to 107 lines (27% reduction) - Preserve all critical features: window globals for E2E tests, performance optimizations, input handling, and diff-based terminal updates - Maintain full compatibility with App.tsx and all 17 E2E tests
…sion setup Remove TerminalModeSwitcher component and flaky WS counter test from E2E suite. Update buffer extension tests to use interactive bash sessions with prompt-based assertions for improved reliability and maintainability.
Document the terminal system architecture including core components (RawTerminal, useWebSocket, useSessionManager, PTY Manager), data flow patterns, and key design decisions. Add troubleshooting note about buffer extension tests for interactive PTY sessions.
… API Extract route definitions into shared modules (RouteBuilder, routes) for type-safe URL construction across client and server. Standardize session clearing to use DELETE /api/sessions instead of POST /api/sessions/clear. Add intelligent rebuild detection in global-setup to skip unnecessary builds, automatic session cleanup in test fixtures, and retry logic for robust test state verification. BREAKING CHANGE: POST /api/sessions/clear endpoint removed, use DELETE /api/sessions instead.
Refactor RouteBuilder to use a type-safe parameter object pattern
(session.method({ id }) instead of session(id).method()) with runtime
parameter validation via buildUrl() helper. Update all usages in
useSessionManager and useWebSocket.
Improve global-setup build failure handling to use process.exit()
instead of throwing errors for cleaner test runner integration.
…ation Create apiClient with structured routes and generic apiFetch functions providing compile-time type checking for paths, methods, bodies, and responses. Update routes.ts to include method definitions and nested structure. Migrate useSessionManager to use the new typed API client, eliminating manual fetch boilerplate and string concatenation.
Replace scattered page.request calls with centralized type-safe API client. Add apiClient helper for E2E tests and api fixture to test context. Integrate RouteBuilder for consistent, type-safe URL routing. This improves test maintainability, reduces code duplication, and ensures consistent API patterns across the entire test suite. No functional changes to production code behavior.
Migrate all E2E tests to use the centralized api fixture instead of manually instantiating createApiClient. Update helper functions to accept api parameter directly, removing redundant imports and boilerplate code. This completes the api client centralization by leveraging Playwright's fixture system for cleaner, more maintainable tests. No functional changes to test behavior.
Extend page fixture to automatically navigate to server URL and wait for networkidle. Update api fixture to auto-clear sessions before each test. Restore server parameter where needed for navigation. Simplify tests by removing redundant setup code. This makes tests cleaner, more reliable, and reduces boilerplate while maintaining proper isolation between tests.
Clean up tests to leverage fixture auto-navigation by removing unnecessary server parameters and explicit page.goto() calls. Simplify test signatures to only include needed dependencies (page, api, or both). This completes the fixture enhancement by removing all now-redundant manual navigation code, making tests more concise and maintainable.
…ring Introduce autoCleanup fixture that automatically clears sessions before every test via independent auto fixture. Remove all explicit api.sessions.clear() calls from test files. Fix input-capture tests to use page.reload() for proper state reset with localStorage. Simplify Ctrl+C test to verify status badge instead of tracking kill requests. This achieves fully automatic test isolation without any manual cleanup code, improving test reliability and maintainability.
Remove console.log statements for session status/PID and
page.on('console') event handlers that were used for debugging
during test development.
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.
Summary
This PR addresses CI pipeline issues and introduces a comprehensive web UI for PTY session management.
Key Changes
Impact
Preview of this branch is available at: https://www.npmjs.com/package/opencode-pty-test