Refresh failed with the cryptic "Unexpected token '<', "<!DOCTYPE ..."
is not valid JSON" whenever the Git server returned an HTML page (login,
SSO redirect, or proxy/error page) on a 2xx/3xx response. safeRequest
only threw on status >= 400, so such bodies slipped through and crashed
at response.json.
Add BaseGitService.parseJson() which detects non-JSON/HTML bodies and
throws an actionable message, and use it for all response.json reads in
the GitHub and GitLab services. Also harden parseErrorResponse so HTML
error pages produce a clear message instead of dumping the raw document.
Add tests covering HTML 2xx responses, HTML detection by leading '<',
malformed JSON, and HTML error pages.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DwioG4CNKUBuKiZdowLFWe
This commit consolidates several improvements to satisfy SonarCloud Quality Gate and enhance the overall plugin stability:
- Code Quality & Refactoring:
- Reduced duplication to 0% by refactoring SyncManager and SyncStatusView.
- Implemented centralized 'processBatch' logic for multi-file sync operations.
- Fixed security hotspots by replacing legacy atob/btoa with Buffer.
- Added memory safety limits to the diff algorithm to prevent DoS.
- Test Coverage & Reliability:
- Improved SyncManager coverage to 81.8% and GitignoreManager to 92.8%.
- Added comprehensive unit tests for batch operations and complex .gitignore patterns.
- Resolved all ESLint 'unsafe-member-access' and 'unbound-method' warnings in tests.
- Infrastructure & Metadata:
- Consolidated GitHub Actions into a single optimized 'ci.yml' using latest versions (v6-v8).
- Synchronized manifest.json and versions.json to v1.1.0.
- Fixed workflow permission issues identified by CodeQL.
- Implement rootPath prefixing for GitLab API paths.
- Add 'Test connection' button in settings UI with status feedback.
- Remove debug console logs from main.ts.
- Align vitest dependencies in package.json.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Added rootPath to GitLabFilesPushSettings and DEFAULT_SETTINGS
- Implemented testConnection in GitLabService to verify credentials
- Added rootPath support to GitLabService API URL generation
- Added UI fields for rootPath and Test connection button in settings tab
- Updated tests to include rootPath in mock settings and services
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Add SHA comparison in pushFile to detect remote changes before pushing
- Update syncMetadata (lastSyncedSha) after successful push and pull
- Add comprehensive test cases for conflict scenarios and metadata updates
- Use syncMetadata to track state and prevent overwriting remote work
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>