chore: Bump Microsoft.NET.Test.Sdk from 17.11.1 to 18.9.0 - #4
chore: Bump Microsoft.NET.Test.Sdk from 17.11.1 to 18.9.0#4dependabot[bot] wants to merge 39 commits into
Conversation
- Parse usageCount, limitCount, usageResetAt from 9Router API - Parse expiresAt, expiresIn, lastRefreshAt for OAuth providers - Add UsageInferenceService to estimate usage from error messages when backend doesn't provide data - Support all providers: Codex, Kiro, OpenRouter, Ollama, Kimchi - Add usage percentage calculation and limit checks to ProviderConnection - Add 17 comprehensive tests (UsageInferenceServiceTests + integration tests) - Document backend API integration guide and workaround strategy This implementation allows RouterPlus to display quota information immediately using inference while being ready to use real data when the backend adds usage tracking API.
- Add UsageDatabaseReader to read usage data from %APPDATA%\9router\db\data.sqlite - Parse usageDaily table to get today's usage by connectionId - Update RouterApiClient to use database usage data (requests count) - Fallback chain: database -> inference from errors - Add Microsoft.Data.Sqlite dependency - Display real request counts instead of estimated 100/100 This provides accurate usage numbers from 9Router's actual request tracking.
Changed DateTimeOffset.Now to DateTimeOffset.UtcNow to ensure reset time is calculated correctly in UTC timezone. Before: 2026-08-23 00:00:00 +07:00 = 2026-08-22 17:00:00 UTC (wrong) After: 2026-08-23 00:00:00 UTC (correct)
Database logic was incorrectly overriding usageResetAt that was already set from expiresAt field for OAuth providers. Before: - Codex shows 'Reset sau 1 ngày' (wrong, from database override) - Should show 'Reset sau 9 ngày' (from expiresAt) After: - Only set usageResetAt from database if NOT already set - Priority: expiresAt > database daily reset > inference Example: - Codex expiresAt: 2026-09-01 → Reset sau 9 ngày ✅ - Kiro expiresAt: 2026-08-22 12:07 → Reset sau 59 phút ✅ - OpenRouter (no expiresAt) → Reset sau 1 ngày ✅
- Changed database from fallback to PRIMARY source for usageCount - Database local is real-time and most accurate (from 9Router SQLite) - API response may be stale/outdated, so database always overrides it - API limitCount is preserved (database doesn't track limits) - Fixed UsageInferenceIntegrationTests to pass usageByConnection parameter Before: API usageCount (if available) > Database > Inference After: Database usageCount > Inference > null (API ignored for usage) This ensures usage tracking displays real-time accurate data.
- Added GetTokenExpirationByConnection() to read expiresAt from providerConnections table - Database is now PRIMARY source for both usage AND token expiration - Fallback to API response only when database doesn't have the data - This fixes incorrect expiration display when 9Router is not running Issues fixed: - Codex: Now shows correct token expiry (5-9 days) instead of inference - Kiro: Now shows correct token expiry (~1 hour) from database - Kimchi: Still shows inference (no token in database - correct behavior) Priority: Database expiresAt > API expiresAt > usageResetAt logic
Previous commit 9dab61b added GetTokenExpirationByConnection() but did NOT actually use it in ParseConnection(). The logic was still parsing expiresAt from API response first, making database a no-op. This commit ACTUALLY implements the database-first logic: - Check tokenExpirationByConnection FIRST - Fallback to API response ONLY if database has no token - This ensures accurate token expiration even when 9Router is offline Without this fix: - Codex: Shows wrong time (from API or inference) - Kiro: Shows wrong time (from API or inference) With this fix: - Codex: Shows correct 5-9 days from database - Kiro: Shows correct ~30 minutes from database This is the ACTUAL fix that makes the feature work.
- Add search TextBox at Grid.Row=5 with icon and clear button - Binding to ProfileSearchText with UpdateSourceTrigger=PropertyChanged - Clear button shows only when search text is not empty - Backend filtering logic already exists and works - Search box was previously removed during Settings UI improvements
RouterPlus now calls the same Quota Tracker API that the 9Router dashboard uses, ensuring usage display matches exactly: - Codex: session used/total/resetAt (e.g. 100/100, reset 2026-09-21) - Kiro: credit used/total/resetAt (e.g. 50/50, reset 2026-09-01) - Kimchi: gracefully falls back (API not implemented) New priority chain: Quota API > Database > Inference > null Changes: - Added FetchAllQuotasAsync() to fetch quota for all connections in parallel - Added FetchQuotaAsync() to call /api/usage/[connectionId] per connection - Added QuotaData record for parsed quota response - ParseConnection now applies quota data as HIGHEST priority override - Updated tests to account for additional quota API calls This ensures RouterPlus shows the EXACT same data as the Quota Tracker dashboard at http://localhost:20128/dashboard/quota
- Search box now at Grid.Row=4 (before filters) - Provider filters moved to Grid.Row=5 (after search) - Added missing RowDefinition for proper layout - Better UX: search first, then filter by provider
- UseLightTheme defaults to true for new installations - Existing users keep their saved preference - Applied to both LoadAsync() and Load() methods
When user clicks 'Auto-detect Chrome' button: - If 1 Chrome found → apply directly - If multiple Chrome found → show selection dialog - If none found → show error message Features: - ChromeLocator.FindAll() searches multiple locations - Supports Google Chrome, CentBrowser, Brave, Edge, Chromium - Searches common paths: C:\, D:\, G:\, Program Files, LocalAppData - Dialog shows friendly names and full paths - User can select preferred installation Resolves: Auto-detect now handles multiple Chrome installations
Enhancements: 1. Fixed User Data detection logic - Each Chrome now finds its own User Data directory - Validates Local State file existence - CentBrowser no longer uses Google Chrome's User Data 2. Added validation indicators - Green badge: ✓ Hợp lệ (valid installation) - Red badge: ✗ Không hợp lệ (invalid paths) - Validates both executable and User Data paths 3. Added navigation buttons - 📁 button next to Chrome path → opens folder and selects file - 📁 button next to User Data → opens folder - Shows error if path doesn't exist 4. Added Rescan button - 🔄 Scan lại button in dialog header - Re-runs FindAll() to refresh installation list - Useful after installing/uninstalling browsers Implementation details: - ChromeLocator.FindUserDataDirectoryForExecutable() improved - Validates User Data by checking Local State file - Opens Windows Explorer with Process.Start() - Fully qualified MessageBox names to avoid ambiguity
- Add patterns for session reports and temp scripts - Add patterns for sensitive files (.env, *.key, secrets.*, etc.) - Prevent accidental commit of development artifacts - Exclude Python cache and temporary HTML files Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Remove temp_db_query/ (temporary debugging console app) - Update .gitignore to prevent similar temp directories - Keep docs/mockups/*.html (legitimate UI design docs) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Add DialogButtonStyle, CompactButtonStyle, and ToolButtonStyle to Theme.xaml - Apply centralized styles to all buttons in ChromeSelectionDialog - Remove inline style properties for consistent sizing and spacing - Ensures single source of truth for button styling Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Display the number of profiles connected to each provider in the filter tags (e.g., 'Codex (46)', 'Kimchi (35)', 'Kiro (16)'). Changes: - Add ProfileCount and DisplayNameWithCount properties to ProfileProviderFilterOption - Add UpdateProviderFilterCounts() method to MainViewModel to calculate counts - Update filter tag binding to show count alongside provider name - Counts update automatically when connections are refreshed Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: delete connection per profile with header icon buttons
Keep workflow text under provider name, remove redundant badge on the right. Each provider card now shows workflow type once (under name) and status badge only. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Enable weekly dependency updates for NuGet packages. This completes security setup: secret scanning, push protection, and automated updates. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
--- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.9.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.9.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
|
🤖 Review skipped: reviews for bot-created pull requests are not allowed on free accounts. Upgrade to a paid plan to enable bot reviews. |
|
Closing due to history rewrite. Dependabot will recreate if still needed. |
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. You can also ignore all major, minor, or patch releases for a dependency by adding an If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
Updated Microsoft.NET.Test.Sdk from 17.11.1 to 18.9.0.
Release notes
Sourced from Microsoft.NET.Test.Sdk's releases.
18.9.0
What's Changed
New Contributors
Full Changelog: microsoft/vstest@v18.8.0...v18.9.0
18.8.1
What's Changed
Full Changelog: microsoft/vstest@v18.8.0...v18.8.1
18.8.0
What's Changed
Full Changelog: microsoft/vstest@v18.7.0...v18.8.0
18.7.0
What's Changed
New Contributors
Full Changelog: microsoft/vstest@v18.6.0...v18.7.0
18.6.0
What's Changed
Changes to tests and infra
... (truncated)
18.5.1
What's Changed
Full Changelog: microsoft/vstest@v18.5.0...v18.5.1
18.5.0
What's Changed
Full Changelog: microsoft/vstest@v18.4.0...v18.5.0
18.4.0
What's Changed
Add LoongArch64 support by @stdmnpkg in Add LoongArch64 support microsoft/vstest#15359
Refactor Condition evaluation by @Youssef1313 in Refactor Condition evaluation microsoft/vstest#15357
Adding info on extensions points part 1 by @nohwnd in Adding info on extensions points part 1 microsoft/vstest#15360
Add option to ask for uploading code QL before the standard window ends by @nohwnd in Add option to ask for uploading code QL before the standard window ends microsoft/vstest#15373
Update runtime versions by @nohwnd in Update runtime versions microsoft/vstest#15372
Fix .NET 10 regression for traits by @Youssef1313 in Fix .NET 10 regression for traits microsoft/vstest#15370
Update target frameworks to net10.0 and net11.0 by @dotnet-maestro[bot] in Update target frameworks to net10.0 and net11.0 microsoft/vstest#15349
Fix names in pipeline matrix so we don't have to align them by @nohwnd in Fix names in pipeline matrix so we don't have to align them microsoft/vstest#15365
Update SECURITY.md by @Youssef1313 in Update SECURITY.md microsoft/vstest#15342
New Contributors
Full Changelog: microsoft/vstest@v18.3.0...v18.4.0
18.3.0
What's Changed
Internal fixes and updates
New Contributors
18.0.1
What's Changed
Fixing an issue with loading covrun64.dll on systems that have .NET 10 SDK installed: https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/code-coverage-dynamic-native-instrumentation
Internal changes
Full Changelog: microsoft/vstest@v18.0.0...v18.0.1
18.0.0
What's Changed
Internal fixes and updates
... (truncated)
17.14.1
What's Changed
Full Changelog: microsoft/vstest@v17.14.0...v17.14.1
17.14.0
What's Changed
.NET versions updated
This version of VS Test upgraded .NET to net8 and net9. All projects targeting net6.0 (or other end-of-life .NET target frameworks) should pin their version of Microsoft.NET.Test.SDK to 17.13.0, or update the projects to net8 or newer. We remain backwards compatible with previous versions of Microsoft.NET.Test.SDK. This change does NOT prevent you from:
It also has no impact on .NET Framework projects, where we continue targeting .NET Framework 4.6.2.
Changes
Internal version updates and fixes
New Contributors
... (truncated)
17.14.0-preview-25107-01
What's Changed
.NET versions updated
This version of VS Test upgraded .NET to net8 and net9. All projects targeting net6.0 (or other end-of-life .NET target frameworks) should pin their version of Microsoft.NET.Test.SDK to 17.13.0, or update the projects to net8 or newer. We remain backwards compatible with previous versions of Microsoft.NET.Test.SDK. This change does NOT prevent you from:
It also has no impact on .NET Framework projects, where we continue targeting .NET Framework 4.6.2.
Changes
Internal version updates and fixes
Will probably revert before release:
New Contributors
Full Changelog: microsoft/vstest@v17.13.0...v17.14.0-preview-25107-01
17.13.0
What's Changed
Add letter number among valid identifiers in class name by @nohwnd in Add letter number among valid identifiers in class name microsoft/vstest#13868
Fix formatting in Runner by @mthalman in Fix formatting in Runner microsoft/vstest#13871
Downgrade xunit skip warning to info by @nohwnd in Downgrade xunit skip warning to info microsoft/vstest#10381
Add msdia for arm64 into nuget by @nohwnd in Add msdia for arm64 into nuget microsoft/vstest#10382
Enable native debugging for vstest.console by @ocitrev in Enable native debugging for vstest.console microsoft/vstest#10401
Fix RFCs links by @Youssef1313 in Fix RFCs links microsoft/vstest#10424
Convert to auto property by @nohwnd in Convert to auto property microsoft/vstest#10365
Update Versions.props by @nohwnd in Update Versions.props microsoft/vstest#10378
Enable TSA by @jakubch1 in Enable TSA microsoft/vstest#10385
Arm64 dia by @nohwnd in Arm64 dia microsoft/vstest#10390
Update source-build team references by @MichaelSimons in Update source-build team references microsoft/vstest#10388
Exclude .signature.p7s from nupkg file count by @ellahathaway in Exclude .signature.p7s from nupkg file count microsoft/vstest#10418
Set NetCurrent so that it doesn't roll forward automatically by @ViktorHofer in Set NetCurrent so that it doesn't roll forward automatically microsoft/vstest#10622
New Contributors
Full Changelog: microsoft/vstest@v17.12.0...v17.13.0
17.12.0
What's Changed
Internal and infrastructure fixes:
Full Changelog: microsoft/vstest@v17.11.1...v17.12.0
Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)