-
Notifications
You must be signed in to change notification settings - Fork 0
Dev #897
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
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
- Created unified MediaGenerationStatus enum with 6 simplified states - Replaced complex video statuses (6 states including timedout) with unified enum - Replaced image statuses (4-5 inconsistent states) with unified enum - Added helper functions isActiveStatus() and isTerminalStatus() - Added mapLegacyStatus() for backward compatibility during migration - Updated all components to use MediaGenerationStatus consistently - Updated all stores and hooks to use the unified enum - Fixed all test files to use MediaGenerationStatus enum values - Removed deprecated GenerationStatus type usage - Simplified retry logic to only check Failed status Benefits: - Consistent status handling across Video and Image features - Reduced complexity (timedout now maps to Failed) - Better TypeScript type safety with enum vs string literals - Easier to maintain and extend status handling
- Created comprehensive type definitions with discriminated unions - Implemented proper type guards with validation - Added response normalization layer to handle all format variations - Removed all try/catch JSON parsing from VideoGallery - Added comprehensive unit tests for type guards and normalizer Type Safety Improvements: - VideoResponse discriminated union for standard/backend/unknown formats - Type guards: isVideoData, isStandardVideoResponse, isBackendVideoResponse - Safe JSON parsing with safeJsonParse function - Response identification with identifyVideoResponse - Utility guards: isDefined, isNonEmptyString, isPositiveNumber Response Normalization: - normalizeVideoResponse handles all response formats - extractVideoFromTaskResult replaces complex parsing logic - createVideoCacheKey provides consistent cache key generation - validateVideoData ensures data integrity - Batch processing support with extractVideosFromTasks Benefits: - Eliminated runtime errors from malformed data - TypeScript strict mode compliance - Centralized response handling logic - Better error handling and logging - Improved maintainability and testability
- Create centralized configuration module at /app/config/mediaGeneration.ts - Extract all magic numbers to named constants with environment variable support - Configure polling intervals, retry settings, storage limits, UI dimensions - Update all components and stores to use centralized configuration - Add configuration validation with development-time checks - Support environment-based customization for all configuration values Configuration includes: - Video polling (interval, timeout, max interval) - Retry logic (max count, delays, backoff multiplier) - Storage limits (history size, cache TTL) - Real-time connections (SignalR errors, reconnect intervals) - UI settings (grid columns, icon sizes, prompt input dimensions) - Media defaults (image/video generation parameters) All values can be overridden via environment variables for deployment flexibility. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Create structured /app/components/media/ directory hierarchy - Move shared components to organized subdirectories: - MediaGallery/ for gallery and card components - MediaPromptInput/ for prompt input components - MediaDownloader/ for download functionality - MediaMetadata/ for metadata extraction - utils/ for shared utilities - Consolidate media utilities (download, metadata, type guards, normalizers) - Update all imports in Video and Image pages to use new paths - Create comprehensive index files for clean exports - Add new MediaDownloader component for consistent download UI Benefits: - Clear separation of shared vs specific components - Easier to find and reuse components - Better code organization - Simplified import paths All tests pass and no functionality changes. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add unit tests for ImageGallery component - Empty state rendering - Image display with results - Download and remove functionality - Loading and error states - Metadata extraction - Accessibility tests - Add unit tests for ImagePromptInput component - User input handling - Submit button interactions - Loading state behavior - Error handling - Keyboard shortcuts (Ctrl+Enter, Cmd+Enter) - Character count display - Add unit tests for useImageStore hook - Initial state verification - Prompt management - Image generation flow - Results management - Settings updates - Task history tracking - Error handling including balance warnings - Add unit tests for media download utilities - File size formatting - MIME type detection - URL validation - Base64 handling - Blob creation - Download trigger functionality - Fix Jest configuration for Next.js compatibility Test coverage now includes all critical paths for Image generation features. All tests are passing and maintainable. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Resolves failing tests after media component reorganization (#845) and comprehensive test coverage addition (#844): - Add custom test-utils.tsx with Mantine provider wrapper for component tests - Fix ImageGallery tests to match actual component behavior and file structure - Fix useImageStore tests with proper state isolation between test cases - Fix download utility tests to match implementation expectations - Fix ImagePromptInput keyboard shortcut test expectations - Fix responseNormalizer tests to include prompt_tokens in usage calculations - Fix useEnhancedVideoGeneration progress tests with correct mock status values All tests now pass with proper mocking and assertions that match the current component implementations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Implemented IToolCostCalculationService interface for cost calculation and serialization of tool usage data. - Created ToolCostCalculationService class to handle cost calculations based on provider configurations. - Added methods to calculate total costs for tool usage and serialize tool usage data to JSON. - Included error handling and logging for better traceability during cost calculations.
…ility - Updated the database migration guide to emphasize tooling checks and prevent migration failures. - Removed critical warnings about Claude AI's migration capabilities and streamlined the migration process. - Consolidated migration steps and added clear instructions for validating migrations. - Deleted the `validate-postgresql-syntax.sh` script as its functionality is now integrated into the standard EF Core workflow. - Updated README documentation to reflect changes in migration validation processes.
…cost calculations - Implemented ToolCostCalculationService with unit tests for cost calculations based on tool usage and provider configurations. - Developed ProviderToolsPage component for displaying, adding, and exporting provider tools. - Created CreateProviderToolModal and EditProviderToolModal for managing provider tool details. - Added ProviderToolsTable component for listing provider tools with edit and delete options. - Introduced ProviderToolsService for API interactions related to provider tools, including import and export functionalities.
…nostic steps, and solutions
…age documentation
- Implement comprehensive tests for VideoGallery, covering scenarios such as empty state, completed videos, pending/generating videos, failed videos, and clear history functionality. - Include tests for metadata extraction and base64 video support in VideoGallery. - Create tests for VideoQueue, addressing current task display, failed task handling, retry history, and status display. - Mock necessary dependencies and components to isolate tests and ensure reliable outcomes.
- Bump Next.js version from 15.5.2 to 15.5.3 in package.json. - Refactor ChatSettings component to import presets from @knn_labs/conduit-core-client. - Update ImageGallery and ImagePromptInput tests to remove unnecessary type assertions and improve type safety. - Modify useImageStore mock to enhance type definitions and ensure better test coverage. - Upgrade Dockerfile to use .NET SDK version 10.0.100-rc.2 and ASP.NET version 10.0.0-rc.2. - Update GenerateOpenApiSpecs project to target .NET 10.0 and adjust package references accordingly. - Add HOSTNAME environment variable to docker-compose.dev.yml for official Next.js Docker configuration. - Enhance start-dev.sh script with cleanup functions for stale containers and port conflict checks.
…ntication handlers
Upgrades Next.js to version 16.0.10 which includes critical security patches and performance improvements. Using webpack bundler for stability with local SDK dependencies. Breaking changes addressed: - Dynamic route params already async-compliant (verified 3 files) - No breaking changes to cookies(), headers(), or draftMode() usage - Clerk authentication (v6.36.3) compatible with Next.js 16 - React 19.2.3 and Node.js 22 supported Configuration changes: - Using webpack bundler (added --webpack flag to dev script) - Removed deprecated eslint config from next.config.js - TypeScript configuration auto-updated by Next.js 16 Dependency updates: - next: 15.5.3 → 16.0.10 - react: 19.1.1 → 19.2.3 - react-dom: 19.1.1 → 19.2.3 - @clerk/nextjs: 6.25.4 → 6.36.3 - eslint-config-next: 15.4.2 → 16.0.10 Bug fixes: - Fixed TypeScript error in videoSignalRClient.ts (coreApiUrl → gatewayApiUrl) Testing performed: - ✅ npm run type-check - All types valid - ✅ Development server starts with webpack bundler - ✅ SDK modules resolve correctly (@knn_labs packages) - ✅ API endpoints functional (health check returns 200) - ✅ Hot reload working Performance notes: - Using webpack for stability with local file: dependencies - Turbopack available for future testing with --turbopack flag - Potential 2-5x build speed improvement when migrating to Turbopack 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Upgrade/nextjs 16.0.10
… test suite Implements MessagePack binary protocol for SignalR connections, providing 30-50% bandwidth reduction over JSON while maintaining full backward compatibility. Server-Side Changes: - Add MessagePack protocol configuration to Gateway and Admin APIs - Configure LZ4 compression with 256-byte threshold - Add protocol detection to SignalR metrics (protocol tag on all metrics) - Update ISignalRMetrics interface with optional protocol parameter - Environment variable: SIGNALR_MESSAGEPACK_ENABLED (default: true) Client-Side Changes: - Update Common SDK with SignalRProtocolType enum and lazy loading - Add MessagePack support to WebAdmin videoSignalRClient - Environment variable: NEXT_PUBLIC_SIGNALR_USE_MESSAGEPACK (default: false) - Graceful fallback to JSON if MessagePack unavailable Testing: - Unit tests: MessagePackProtocolTests, MessagePackCompressionTests, SignalRProtocolMetricsTests - Integration tests: SignalRMessagePackIntegrationTests, SignalRProtocolNegotiationTests - Performance benchmarks: SignalRMessagePackBenchmarks - All 19 new tests passing Documentation: - Comprehensive MessagePack protocol guide at docs/api-guides/signalr/messagepack-protocol.md - Updated Common SDK README with protocol usage examples - Troubleshooting guide and migration procedures Key Features: - 30-50% bandwidth reduction with LZ4 compression - Backward compatible (existing JSON clients unaffected) - Protocol metrics tracking for monitoring - Security: MessagePackSecurity.UntrustedData (CVE-2020-5234 protection) - Lazy loading on client-side for optimal bundle size 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove unused provider health code from useProviderApi hook: - ProviderHealthStatusDto interface - HealthDataResponse interface - isHealthDataResponse type guard - getProviderHealth function (returned mock data only) - ProviderType import (no longer needed) This code was part of the provider health monitoring system removed in #687. The function was never called anywhere. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove all remaining ProviderHealth references from documentation as part of epic #680 (Remove Provider Health Monitoring System). Documentation cleaned: - dto-guidelines.md: Updated examples to use DashboardStatsDto - admin-api-integration.md: Removed ProviderHealthServiceAdapter refs - hub-reference.md: Removed health-related SignalR methods - real-time-guide.md: Removed OnProviderHealth event - error-tracking.md: Updated health monitoring description - SDK docs: Removed ProviderHealth service and type references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add connection limit enforcement to prevent resource exhaustion from excessive SignalR connections. The existing tracking infrastructure was present but never enforced - this adds the missing check before allowing new connections. - Add SignalRConnectionOptions for configurable limits (100/VK, 10K global) - Add ConnectionLimitResult class for limit check responses - Add CheckConnectionLimitAsync to ISignalRRateLimitService - Enforce limits in VirtualKeySignalRRateLimitFilter.OnConnectedAsync - Publish ConnectionLimitExceeded domain event when limit reached - Add comprehensive unit tests (65 test cases) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Extract shared HTTP client functionality from Gateway SDK (FetchBasedClient) and Admin SDK (FetchBaseApiClient) into abstract BaseApiClient class in Common. Changes: - Add retry-strategy.ts with unified retry types (FIXED_DELAY, EXPONENTIAL_BACKOFF, CUSTOM_DELAYS) - Add base-client-config.ts with BaseApiClientConfig interface - Add BaseApiClient.ts with template method pattern for SDK-specific behavior - Update Gateway FetchBasedClient to extend BaseApiClient (Bearer auth + exponential backoff) - Update Admin FetchBaseApiClient to extend BaseApiClient (X-Master-Key + fixed delay) Fixes #630 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…icationHub) Adds 73 unit tests for high-priority SignalR hubs: - HubTestBase.cs: Base class with mock setup for SignalR testing - MockSecureHub.cs: Concrete implementation for testing abstract SecureHub - SecureHubTests.cs: 18 tests for authentication, group management - TaskHubTests.cs: 26 tests for task lifecycle and subscriptions - SpendNotificationHubTests.cs: 29 tests for spend tracking, budget alerts Key implementation details: - Uses real ISignalRMetrics (Counter<long> is sealed struct, cannot be mocked) - TestMeterFactory creates real Meter instances for counter support - Unique virtual key IDs avoid static cooldown dictionary conflicts Fixes #889 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive unit tests for the ResilientEventHandlerBase class covering circuit breaker, retry policy, timeout handling, and fallback mechanisms. Test coverage includes: - Constructor validation and transient exception classification - Circuit breaker behavior (threshold, callbacks, default values) - Retry policy (transient exceptions, max retries, logging) - Timeout handling (quick operations, default values) - Fallback mechanism (circuit open, non-transient errors, logging) - Integration tests (timing logs, message/token propagation) Total: 30 tests covering all resilience patterns. Fixes #890 🤖 Generated with [Claude Code](https://claude.ai/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…ests Add comprehensive integration tests for SignalR with Redis backplane: - Redis Backplane Failover Tests (5 tests): - SignalR continues operating when Redis temporarily unavailable - Messages delivered across servers after Redis reconnection - Multi-server message delivery works with Redis backplane - Graceful degradation when backplane not configured - SignalR recovers after brief Redis outage - Connection Lifecycle Tests (6 tests): - Connection state transitions - Automatic reconnection triggers reconnecting event - Reconnection delay intervals are respected - Reconnected event fires after server restart - Closed event fires on permanent disconnection - Connection timeout is handled gracefully - Group Management Tests (5 tests): - Client can join and leave groups - Group membership requires rejoin after reconnection - Group cleanup occurs on disconnection - Multi-client group membership works - Group message delivery to correct clients only - Multi-Client Tests (6 tests): - Broadcast to all clients works across servers - SendToOthers excludes sender - JSON and MessagePack clients can communicate - Multiple protocol clients receive broadcasts correctly - Multiple concurrent messages are delivered correctly - Client-specific routing with SendToOthers Infrastructure: - RedisTestContainerFixture: Shared Redis container using Testcontainers - MultiServerSignalRHostFactory: Factory for multi-server SignalR hosts - SignalRIntegrationTestBase: Base class with common test utilities Also excludes pre-existing broken test files (StreamingWithToolCallsTest.cs, StreamingWithReasoningTest.cs) from build - these need fixing in a separate PR. Fixes #891 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…t exclusions - Fix StreamingWithToolCallsTest and StreamingWithReasoningTest to use correct base class properties (_context.VirtualKey and _context.ModelAlias) - Add Observations property to TestContext for test reporting - Add PostAsync<T> and SendAsync methods to ConduitApiClient for streaming - Remove exclusions from IntegrationTests.csproj for now-fixed test files - Remove 23 ghost exclusion entries from Tests.csproj for deleted files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sync C# enum with TypeScript SDKs by adding: - Ultravox = 7 (voice AI models) - ElevenLabs = 8 (audio synthesis) These values were already present in the TypeScript SDKs but missing from the C# enum, causing a discrepancy between frontend and backend. Closes #636 as obsolete - the ProviderType migration work described in that issue was already completed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ecution - Rename SDK config from Core to Gateway (fixes broken script) - Add dependency validation before lint/build - Add Step 6: Run tests after build - Track test failures in summary output - Update help text and argument parsing Closes #892 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Admin SDK: - Remove unused imports (BaseRequestOptions, Logger, CacheProvider) from FetchBaseApiClient.ts - Create narrower GetRequestOptions type for proper method signatures in helpers.ts Gateway SDK source: - Add generic constraint `extends BaseStreamChunk` in BaseStreamingService.ts - Use Object.assign() pattern to fix private property intersection in ConduitCoreClient.ts - Fix method call connect() → startAllConnections() in VideoProgressTracker.ts - Remove unused signalRReconnectAttempts variable and fetchCurrentState() method Gateway SDK tests: - Add required created_at/updated_at fields to AsyncVideoGenerationResponse mocks - Fix Jest mock typing with proper jest.MockedFunction usage - Fix ReadableStreamReadResult return types in enhanced-web-streaming.test.ts - Correct property names in performance-metrics.test.ts All fixes maintain strict lint rules without any rule suppressions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a retry button to recoverable error messages in the chat interface, allowing users to resend their message when transient errors occur. - Add onRetryMessage callback prop to ChatMessages component - Add retry button UI for errors with recoverable: true - Wire handleRetryMessage in ChatInterface to find and resend user message - Button disabled during loading to prevent duplicate requests 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement automatic retry with exponential backoff for transient errors in the SDK's ChatStreamingManager. Retry logic lives in the SDK for reusability across frameworks. SDK changes: - Add StreamingRetryConfig and RetryInfo types - Add onRetrying callback to StreamingCallbacks - Wrap streamMessage() with retry loop (up to 3 attempts) - Add exponential backoff with ±20% jitter - Respect Retry-After header for rate limits WebAdmin changes: - Handle onRetrying callback with toast notifications - Dismiss retry notification on successful stream start Retry behavior: - Server errors (5xx): retry with backoff - Timeout (408): retry with backoff - Rate limit (429): retry using Retry-After header - Auth errors (401/403): no retry - Not found (404): no retry 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a dedicated Security Dashboard page at /security to expose the existing security monitoring infrastructure through the UI. Features: - Security Overview Card with threat level indicator and compliance score - Quick Stats Cards (failed auth, blocked IPs, rate limit violations) - Security Events Table with severity filtering and pagination - Active Threats Panel with status indicators - Export to JSON/CSV functionality - Responsive design with loading states Components created: - SecurityDashboard.tsx - Main dashboard component - SecurityOverviewCard.tsx - Threat level and metrics overview - QuickStatsCards.tsx - 4-card stats grid - SecurityEventsTable.tsx - Events table with filtering - ActiveThreatsPanel.tsx - Active threats display - hooks.ts - Data fetching with React Query - handlers.ts - Event handlers for refresh/export - types.ts - TypeScript interfaces Also: - Added getComplianceStatus() to useSecurityApi hook - Added navigation link in Sidebar under Security & Monitoring Closes #893 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace leader election with coordinated warming for ConnectionPoolWarmer to prevent thundering herd effects during multi-instance deployments. Changes: - Add CoordinatedConnectionPoolWarmer service using distributed lock + pub/sub - Add ConnectionPoolWarmingOptions for configuration - Add AddCoordinatedConnectionPoolWarming extension method - Update Gateway and Admin API registrations - Add 18 unit tests for the new service - Document the pattern in background-services-and-workers.md Key behavior change: - Before: Only leader instance warmed its pool, others had cold pools - After: All instances warm pools in coordinated, staggered manner Closes #822 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement circuit breaker pattern in the Node SDK to prevent infinite retry loops and protect against sustained service degradation. Circuit breaker behavior: - CLOSED: Normal operation, failures tracked - OPEN: Automatic retries disabled after 3 consecutive failures in 60s - HALF_OPEN: Allow 1 test request after 30s cooldown Key features: - Single global circuit breaker (simple, session-scoped) - Model-change reset per Issue #896 requirement - Only counts retryable errors (408/429/5xx) - Callbacks for UI integration (onCircuitStateChange, onCircuitOpen) - Opt-in via circuitBreaker config option New files: - SDKs/Node/Common/src/circuit-breaker/* - Core circuit breaker - SDKs/Node/Gateway/src/chat/streaming/streaming-circuit-breaker.ts Closes #896 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create eslint.config.mjs with ESLint 9 flat config - Delete legacy .eslintrc.json - Update lint scripts to use eslint directly (next lint removed in Next.js 16) - Use direct plugin imports to avoid FlatCompat circular structure issues 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove unused imports (Slider, IconRefresh, IconCalendar, etc.) - Remove unused variables (totalPages, loadingSchema) - Fix enum comparison using ModelType.Embedding instead of string - Remove unnecessary type assertions in SecurityDashboard - Fix leading underscore parameters using [...Array(n).keys()] pattern - Add proper types for videoSignalRClient MessagePack protocol - Fix test mocks with jest.requireActual<T>() for type safety - Add useCallback to system-info fetch functions with proper deps - Fix misused promise in RequestLogsFilters onRefresh prop - Fix JSON.parse type safety with explicit unknown type 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add getExecutionStatusColor/BgColor helpers in ChatMessages.tsx - Add getBudgetColor helper in MediaCleanupStatusContent.tsx - Add getStatusFilterValue helper in RequestLogsFilters.tsx - Add getStateIcon helper in TestFunctionModal.tsx Reduces nested ternary warnings from 7 to 2 (remaining are intentional patterns) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- next-env.d.ts: Updated route types reference - tsconfig.json: jsx changed to react-jsx 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeQL found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
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.