mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-11-04 18:07:21 +00:00
Upgraded to .NET 10 (#1147)
This commit is contained in:
1 parent
faae2951f7
commit
fc7399e81b
327 files changed
+3059
-3049
No files matched your search
@@ -12301,9 +12301,6 @@ UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1069211263"] = "The request
|
||||
-- The provider '{0}' refused the request. Your account might not be allowed to use the selected model, or the provider might not serve your region.
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1133173666"] = "The provider '{0}' refused the request. Your account might not be allowed to use the selected model, or the provider might not serve your region."
|
||||
|
||||
-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'"
|
||||
|
||||
-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'"
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<Authors>Thorsten Sommer</Authors>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<WarningsAsErrors>CS8600;CS8602;CS8603;CS9057</WarningsAsErrors> <!-- CS9057: fail instead of silently skipping an analyzer which needs a newer compiler than the SDK's -->
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
@@ -45,6 +45,13 @@
|
||||
-->
|
||||
<NoWarn>IL2026, CS8974</NoWarn>
|
||||
<LangVersion>latest</LangVersion>
|
||||
|
||||
<!--
|
||||
Since .NET 10, the scripts of Blazor come from a package, which the release embeds: see the
|
||||
EmbedBlazorScript target. The SDK adds that package by itself when it spots Razor files; we
|
||||
ask for it here, so that the release does not hinge on that guess.
|
||||
-->
|
||||
<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="..\Trimming.props" />
|
||||
@@ -71,22 +78,20 @@
|
||||
<PackageReference Include="DocumentFormat.OpenXml" Version="3.5.1" />
|
||||
<PackageReference Include="HtmlAgilityPack" Version="1.12.4" />
|
||||
<PackageReference Include="MailKit" Version="4.18.2" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.22" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.22" />
|
||||
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="9.0.22" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="10.0.14" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.14" />
|
||||
|
||||
<!--
|
||||
Its assembly ships with ASP.NET Core, but the package also brings the build logic which writes the
|
||||
manifest of the embedded files. Without that manifest, the release serves no static files at all, and
|
||||
WebRootFiles finds neither the changelogs nor the ERI specifications in any build.
|
||||
-->
|
||||
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.14" />
|
||||
<PackageReference Include="MudBlazor" Version="9.12.0" />
|
||||
<PackageReference Include="MudBlazor.Markdown" Version="9.0.0" />
|
||||
<PackageReference Include="ReverseMarkdown" Version="5.0.0" />
|
||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="3.0.5" />
|
||||
<PackageReference Include="LuaCSharp" Version="0.5.8" />
|
||||
|
||||
<!--
|
||||
Not used by AI Studio directly: MailKit pulls it in through MimeKit, which asks for 10.0.0. That
|
||||
version is affected by CVE-2026-70162 and CVE-2026-84008 (GHSA-2fmv-rv2c-59x7, GHSA-846f-f764-76mx),
|
||||
fixed in 10.0.13. The package wins over the older copy within the .NET runtime, so upgrading .NET
|
||||
alone does not help. Remove this reference once MimeKit itself asks for 10.0.13 or newer.
|
||||
-->
|
||||
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="10.0.13" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -117,13 +122,26 @@
|
||||
<ReadLinesFromFile File="../../metadata.txt">
|
||||
<Output TaskParameter="Lines" PropertyName="Metadata" />
|
||||
</ReadLinesFromFile>
|
||||
|
||||
|
||||
<!--
|
||||
metadata.txt names the .NET SDK which the pipeline pins, but a local build may use another
|
||||
one. Hence, we take the SDK which builds right now. Its .version file starts with the commit
|
||||
it was built from. The .NET runtime is not recorded at all: the app asks for it while it runs.
|
||||
-->
|
||||
<PropertyGroup>
|
||||
<DotnetSdkVersionFile>$(NetCoreRoot)sdk/$(NETCoreSdkVersion)/.version</DotnetSdkVersionFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ReadLinesFromFile File="$(DotnetSdkVersionFile)" Condition="Exists('$(DotnetSdkVersionFile)')">
|
||||
<Output TaskParameter="Lines" PropertyName="DotnetSdkVersionLines" />
|
||||
</ReadLinesFromFile>
|
||||
|
||||
<PropertyGroup>
|
||||
<MetaVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 0 ])</MetaVersion>
|
||||
<MetaBuildTime>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 1 ])</MetaBuildTime>
|
||||
<MetaBuild>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 2 ])</MetaBuild>
|
||||
<MetaDotnetSdkVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 3 ])</MetaDotnetSdkVersion>
|
||||
<MetaDotnetVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 4 ])</MetaDotnetVersion>
|
||||
<MetaDotnetSdkVersion Condition="'$(DotnetSdkVersionLines)' != ''">$(NETCoreSdkVersion) (commit $([System.String]::Copy( $(DotnetSdkVersionLines) ).Split( ';' )[ 0 ].Substring( 0, 10 )))</MetaDotnetSdkVersion>
|
||||
<MetaRustVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 5 ])</MetaRustVersion>
|
||||
<MetaMudBlazorVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 6 ])</MetaMudBlazorVersion>
|
||||
<MetaTauriVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 7 ])</MetaTauriVersion>
|
||||
@@ -152,11 +170,10 @@
|
||||
<_Parameter3>$(MetaBuild)</_Parameter3>
|
||||
<_Parameter3_TypeName>System.UInt32</_Parameter3_TypeName>
|
||||
<_Parameter4>$(MetaDotnetSdkVersion)</_Parameter4>
|
||||
<_Parameter5>$(MetaDotnetVersion)</_Parameter5>
|
||||
<_Parameter6>$(MetaRustVersion)</_Parameter6>
|
||||
<_Parameter7>$(MetaMudBlazorVersion)</_Parameter7>
|
||||
<_Parameter8>$(MetaTauriVersion)</_Parameter8>
|
||||
<_Parameter9>$(MetaAppCommitHash)</_Parameter9>
|
||||
<_Parameter5>$(MetaRustVersion)</_Parameter5>
|
||||
<_Parameter6>$(MetaMudBlazorVersion)</_Parameter6>
|
||||
<_Parameter7>$(MetaTauriVersion)</_Parameter7>
|
||||
<_Parameter8>$(MetaAppCommitHash)</_Parameter8>
|
||||
</AssemblyAttribute>
|
||||
<AssemblyAttribute Include="AIStudio.Tools.Metadata.MetaDataArchitecture">
|
||||
<_Parameter1>$(MetaArchitecture)</_Parameter1>
|
||||
@@ -171,6 +188,18 @@
|
||||
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
Since .NET 10, NuGet prunes a package whose assemblies ship with the shared framework, and with it the
|
||||
package's build logic. Microsoft.Extensions.FileProviders.Embedded must not go this way, see its reference
|
||||
above. .NET 10.0.0 already leaves it out of the pruning (dotnet/aspnetcore#63719); this target keeps it
|
||||
even if a later version of .NET prunes it again. It is the workaround Microsoft gives in that issue.
|
||||
-->
|
||||
<Target Name="_PreserveFileProvidersEmbeddedPackageReference" AfterTargets="AddPrunePackageReferences">
|
||||
<ItemGroup>
|
||||
<PrunePackageReference Remove="Microsoft.Extensions.FileProviders.Embedded" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
Scoped CSS (`.razor.css`) is bundled into `$(AssemblyName).styles.css`, which App.razor links.
|
||||
That bundle is generated at build time, so it never lives in the source tree's wwwroot. The
|
||||
@@ -197,4 +226,28 @@
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
`_framework/blazor.web.js` makes the UI interactive, and App.razor loads it. Up to .NET 9, the shared
|
||||
framework served it. Since .NET 10, it is a static web asset of the package Microsoft.AspNetCore.App.Internal.Assets,
|
||||
which names its folder in BlazorFrameworkStaticWebAssetRoot. Like the scoped CSS bundle above, the release
|
||||
would therefore lack it: the window would show the app, but nothing in it would react. Hence: embed it
|
||||
before the manifest is written.
|
||||
-->
|
||||
<Target Name="EmbedBlazorScript" BeforeTargets="_CalculateEmbeddedFilesManifestInputs">
|
||||
<PropertyGroup>
|
||||
<BlazorScriptToEmbed>$(BlazorFrameworkStaticWebAssetRoot)\blazor.web.js</BlazorScriptToEmbed>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
Fail loudly instead of shipping a release without the script: a missing file here means the
|
||||
package moved it, or the SDK no longer adds the package.
|
||||
-->
|
||||
<Error Condition="'$(BlazorFrameworkStaticWebAssetRoot)' == '' Or !Exists('$(BlazorScriptToEmbed)')"
|
||||
Text="The script of Blazor was not found at '$(BlazorScriptToEmbed)'. Without it, the release starts with a window which does not react at all. Check where .NET keeps blazor.web.js and adjust the EmbedBlazorScript target." />
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(BlazorScriptToEmbed)" Link="wwwroot\_framework\blazor.web.js" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
@@ -89,7 +89,7 @@ public partial class Information : MSGComponentBase
|
||||
|
||||
private string VersionRust => $"{T("Used Rust compiler")}: v{META_DATA.RustVersion}";
|
||||
|
||||
private string VersionDotnetRuntime => $"{T("Used .NET runtime")}: v{META_DATA.DotnetVersion}";
|
||||
private string VersionDotnetRuntime => $"{T("Used .NET runtime")}: v{DotnetRuntimeVersion.Current}";
|
||||
|
||||
private string VersionDotnetSdk => $"{T("Used .NET SDK")}: v{META_DATA.DotnetSdkVersion}";
|
||||
|
||||
|
||||
-3
@@ -12303,9 +12303,6 @@ UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1069211263"] = "Die Anfrage
|
||||
-- The provider '{0}' refused the request. Your account might not be allowed to use the selected model, or the provider might not serve your region.
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1133173666"] = "Der Anbieter „{0}“ hat die Anfrage abgelehnt. Möglicherweise ist Ihr Konto nicht für die Nutzung des ausgewählten Modells berechtigt, oder der Anbieter ist in Ihrer Region nicht verfügbar."
|
||||
|
||||
-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Beim Versuch, die Antwort des LLM-Anbieters „{0}“ zu streamen, sind Probleme aufgetreten. Die Meldung lautet: „{1}“"
|
||||
|
||||
-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Der Versuch, die Antwort des LLM-Anbieters „{0}“ zu streamen, ist fehlgeschlagen. Der Stream konnte nicht gelesen werden. Die Meldung lautet: „{1}“"
|
||||
|
||||
|
||||
-3
@@ -12303,9 +12303,6 @@ UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1069211263"] = "The request
|
||||
-- The provider '{0}' refused the request. Your account might not be allowed to use the selected model, or the provider might not serve your region.
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1133173666"] = "The provider '{0}' refused the request. Your account might not be allowed to use the selected model, or the provider might not serve your region."
|
||||
|
||||
-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'"
|
||||
|
||||
-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'
|
||||
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'"
|
||||
|
||||
|
||||
@@ -1007,22 +1007,12 @@ public abstract class BaseProvider : IProvider, ISecretId
|
||||
try
|
||||
{
|
||||
//
|
||||
// Read the stream, line by line:
|
||||
// Read the stream, line by line, until it ends. We never ask the reader whether the
|
||||
// stream ended: that would wait for the next data without any timeout, and it would
|
||||
// hold a thread meanwhile. Reading the next line tells the same, see below.
|
||||
//
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
if(streamReader.EndOfStream)
|
||||
break;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'"), this.InstanceName, e.Message)));
|
||||
this.logger.LogWarning(e, "Failed to read the end-of-stream state from {ProviderName} '{ProviderInstanceName}': {ErrorMessage}", providerName, this.InstanceName, e.Message);
|
||||
break;
|
||||
}
|
||||
|
||||
// Check if the token is canceled:
|
||||
if (token.IsCancellationRequested)
|
||||
{
|
||||
@@ -1058,13 +1048,14 @@ public abstract class BaseProvider : IProvider, ISecretId
|
||||
break;
|
||||
}
|
||||
|
||||
// The stream ended:
|
||||
if (line is null)
|
||||
break;
|
||||
|
||||
// Skip empty lines:
|
||||
if (string.IsNullOrWhiteSpace(line))
|
||||
continue;
|
||||
|
||||
|
||||
if (this.TryCreateProviderRequestExceptionFromStreamLine(providerName, line, out var providerRequestException))
|
||||
throw providerRequestException;
|
||||
|
||||
|
||||
@@ -39,12 +39,11 @@ public sealed class Encryption(ILogger<Encryption> logger, byte[] secretPassword
|
||||
// Derive key and iv vector: the operations take several seconds. Thus, using a task:
|
||||
await Task.Run(() =>
|
||||
{
|
||||
using var keyVectorObj = new Rfc2898DeriveBytes(secretPassword, secretKeySalt, ITERATIONS, HashAlgorithmName.SHA512);
|
||||
var keyBytes = keyVectorObj.GetBytes(32); // the max valid key length = 256 bit = 32 bytes
|
||||
var ivBytes = keyVectorObj.GetBytes(16); // the only valid block size = 128 bit = 16 bytes
|
||||
|
||||
Array.Copy(keyBytes, this.key, this.key.Length);
|
||||
Array.Copy(ivBytes, this.iv, this.iv.Length);
|
||||
// The max valid key length = 256 bit = 32 bytes, and the only valid block size = 128 bit = 16 bytes:
|
||||
var keyVectorBytes = Rfc2898DeriveBytes.Pbkdf2(secretPassword, secretKeySalt, ITERATIONS, HashAlgorithmName.SHA512, this.key.Length + this.iv.Length);
|
||||
|
||||
Array.Copy(keyVectorBytes, 0, this.key, 0, this.key.Length);
|
||||
Array.Copy(keyVectorBytes, this.key.Length, this.iv, 0, this.iv.Length);
|
||||
});
|
||||
|
||||
var initDuration = stopwatch.Elapsed;
|
||||
|
||||
@@ -292,11 +292,11 @@ public sealed class EnterpriseEncryption
|
||||
/// </summary>
|
||||
private Aes CreateAesV1(byte[] salt)
|
||||
{
|
||||
// Derive key and IV using PBKDF2:
|
||||
using var keyDerivation = new Rfc2898DeriveBytes(this.secretKey!, salt, V1_ITERATIONS, HashAlgorithmName.SHA512);
|
||||
// Derive key and IV using PBKDF2, the first 32 bytes for AES-256 and the last 16 for its block size:
|
||||
var keyAndIv = Rfc2898DeriveBytes.Pbkdf2(this.secretKey!, salt, V1_ITERATIONS, HashAlgorithmName.SHA512, 48);
|
||||
var aes = Aes.Create();
|
||||
aes.Key = keyDerivation.GetBytes(32); // AES-256
|
||||
aes.IV = keyDerivation.GetBytes(16); // AES block size
|
||||
aes.Key = keyAndIv[..32];
|
||||
aes.IV = keyAndIv[32..];
|
||||
aes.Mode = CipherMode.CBC;
|
||||
aes.Padding = PaddingMode.PKCS7;
|
||||
return aes;
|
||||
|
||||
@@ -440,7 +440,7 @@ public static class ExternalHttpClientTimeout
|
||||
customChain.ChainPolicy.CustomTrustStore.AddRange(customRootCertificateCache.Certificates);
|
||||
customChain.ChainPolicy.ApplicationPolicy.Add(new Oid(TLS_SERVER_AUTHENTICATION_EKU_OID));
|
||||
|
||||
// Match the .NET 9 HttpClient default used for the initial system-trust validation.
|
||||
// Match the HttpClient default used for the initial system-trust validation, which .NET 10 kept.
|
||||
// Hostname, signature, validity, EKU, and root trust checks remain enabled.
|
||||
customChain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using System.Reflection;
|
||||
|
||||
namespace AIStudio.Tools.Metadata;
|
||||
|
||||
/// <summary>
|
||||
/// The .NET runtime which runs the app.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Asked while the app runs instead of taken from metadata.txt: a release brings its own runtime,
|
||||
/// and a development build runs on whichever runtime the developer installed.
|
||||
/// </remarks>
|
||||
public static class DotnetRuntimeVersion
|
||||
{
|
||||
/// <summary>
|
||||
/// How many characters of the commit we show, as metadata.txt does.
|
||||
/// </summary>
|
||||
private const int COMMIT_LENGTH = 10;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the version of the runtime together with the commit it was built from, such as
|
||||
/// <c>10.0.14 (commit 0427b9abbe)</c>.
|
||||
/// </summary>
|
||||
public static string Current { get; } = Describe(Environment.Version, typeof(object).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion);
|
||||
|
||||
/// <summary>
|
||||
/// Describes a version of the runtime together with the commit which the informational version
|
||||
/// of its core library names after a plus sign, such as <c>10.0.14+0427b9abbead3f…</c>.
|
||||
/// </summary>
|
||||
/// <param name="version">The version of the runtime.</param>
|
||||
/// <param name="informationalVersion">The informational version of the core library, if any.</param>
|
||||
/// <returns>The version with its commit, or the version alone when the commit is unknown.</returns>
|
||||
internal static string Describe(Version version, string? informationalVersion)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(informationalVersion))
|
||||
return version.ToString();
|
||||
|
||||
var plusIndex = informationalVersion.IndexOf('+');
|
||||
var commit = plusIndex < 0 ? string.Empty : informationalVersion[(plusIndex + 1)..];
|
||||
return commit.Length < COMMIT_LENGTH ? version.ToString() : $"{version} (commit {commit[..COMMIT_LENGTH]})";
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,6 @@ public class MetaDataAttribute(
|
||||
string buildTime,
|
||||
uint buildNum,
|
||||
string dotnetSdkVersion,
|
||||
string dotnetVersion,
|
||||
string rustVersion,
|
||||
string mudBlazorVersion,
|
||||
string tauriVersion,
|
||||
@@ -20,8 +19,9 @@ public class MetaDataAttribute(
|
||||
|
||||
public uint BuildNum => buildNum;
|
||||
|
||||
public string DotnetVersion => dotnetVersion;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the .NET SDK which built the app. The .NET runtime which runs it is <see cref="DotnetRuntimeVersion.Current"/>.
|
||||
/// </summary>
|
||||
public string DotnetSdkVersion => dotnetSdkVersion;
|
||||
|
||||
public string RustVersion => rustVersion;
|
||||
|
||||
@@ -549,12 +549,22 @@ public sealed partial class DataSourceEmbeddingService(SettingsManager settingsM
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
public override Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
// Changes to the embedding settings which do not pass through the queue, cf. ProcessMessage:
|
||||
//
|
||||
// Changes to the embedding settings which do not pass through the queue, cf. ProcessMessage.
|
||||
// We listen for them while the app starts: since .NET 10, ExecuteAsync runs as a task of its
|
||||
// own from its very first line, and a message sent before that task got its turn would go
|
||||
// unnoticed.
|
||||
//
|
||||
MessageBus.INSTANCE.RegisterComponent(this);
|
||||
this.ApplyFilters([], [Event.PLUGINS_RELOADED, Event.CONFIGURATION_CHANGED]);
|
||||
|
||||
return base.StartAsync(cancellationToken);
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
await this.WaitForInitialSettingsAndBootstrapAsync(stoppingToken);
|
||||
|
||||
while (!stoppingToken.IsCancellationRequested)
|
||||
|
||||
@@ -27,12 +27,9 @@ public partial class RustService
|
||||
// Read events line by line:
|
||||
using var reader = new StreamReader(stream);
|
||||
|
||||
// Read until the end of the stream or cancellation:
|
||||
while(!reader.EndOfStream && !stopToken.IsCancellationRequested)
|
||||
// Read the next line of JSON until the end of the stream or cancellation:
|
||||
while(!stopToken.IsCancellationRequested && await reader.ReadLineAsync(stopToken) is { } line)
|
||||
{
|
||||
// Read the next line of JSON from the stream:
|
||||
var line = await reader.ReadLineAsync(stopToken);
|
||||
|
||||
// Skip empty lines:
|
||||
if (string.IsNullOrWhiteSpace(line))
|
||||
continue;
|
||||
|
||||
@@ -352,9 +352,8 @@ public sealed partial class RustService
|
||||
await using var stream = await response.Content.ReadAsStreamAsync(token);
|
||||
using var reader = new StreamReader(stream);
|
||||
|
||||
while (!reader.EndOfStream && !token.IsCancellationRequested)
|
||||
while (!token.IsCancellationRequested && await reader.ReadLineAsync(token) is { } line)
|
||||
{
|
||||
var line = await reader.ReadLineAsync(token);
|
||||
if (string.IsNullOrWhiteSpace(line))
|
||||
continue;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"dependencies": {
|
||||
"net9.0": {
|
||||
"net10.0": {
|
||||
"CodeBeam.MudBlazor.Extensions": {
|
||||
"type": "Direct",
|
||||
"requested": "[9.2.0, )",
|
||||
@@ -42,60 +42,53 @@
|
||||
"resolved": "4.18.2",
|
||||
"contentHash": "ofqddpSbdrD00NqTD0ZyVfKvrl/ZZ70VFFEQ+DuR8r8CdbY3U02/sdb0CSQBNUqJifsXfVHIwRe1ToR2MvJJkw==",
|
||||
"dependencies": {
|
||||
"MimeKit": "4.18.2",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
"MimeKit": "4.18.2"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.App.Internal.Assets": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.14, )",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "T1IOYbID1msKjQEh684HebnN+Xnq/pocMXDukOMZtzzPTf9c4/30+/JndM/1txrqwuSYqWvLiAQWzu4U93cshw=="
|
||||
},
|
||||
"Microsoft.Data.Sqlite.Core": {
|
||||
"type": "Direct",
|
||||
"requested": "[9.0.22, )",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "ivq0VMiRaR2tvwcZYbzJUMrQtbBSLDkZyTNM8FsBv56Ne664XZR2XlhDF0RuAsCDt5lU9yKRs0WHOuDbROv2JQ==",
|
||||
"requested": "[10.0.14, )",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "1p9rO3Q2X/L/9YrYog3vaDzi8u+WZfJCOkDYoHqmofqYP0DLPLPyZcS2Rnh/79JXAodgbs1AgsaNwLpIvC3Xew==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.13"
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Sqlite": {
|
||||
"type": "Direct",
|
||||
"requested": "[9.0.22, )",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "yj54/8fLJC0uI7t5m7uUid3nOYDl7J+G3Hf6MSz+ULyeguA1fxZw3F1u3wMnEBEaH0i8d2hCAMdxanDplIUfvw==",
|
||||
"requested": "[10.0.14, )",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "lxrwnVwvlIfQD4IF4WUVupE6Qxfj3MfFftDVwo7tsGAWCKLL8Ttb8UjIt+gE4e9nRlH7EgdC6TrsArFGnNYREw==",
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Sqlite.Core": "9.0.22",
|
||||
"Microsoft.Extensions.Caching.Memory": "9.0.22",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.DependencyModel": "9.0.22",
|
||||
"Microsoft.Extensions.Logging": "9.0.22",
|
||||
"Microsoft.EntityFrameworkCore.Sqlite.Core": "10.0.14",
|
||||
"Microsoft.Extensions.DependencyModel": "10.0.14",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.13",
|
||||
"SQLitePCLRaw.core": "2.1.13",
|
||||
"System.Text.Json": "9.0.22"
|
||||
"SQLitePCLRaw.core": "2.1.13"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.FileProviders.Embedded": {
|
||||
"type": "Direct",
|
||||
"requested": "[9.0.22, )",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "8pjPIPzG5OGIBG65TSUExMZeMeFpCDVJPtNzYtcJyNPCqgOI/skfKq5ZEca1VmswL2CQ7oxEYiCFNO2LhAJ4uA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.FileProviders.Abstractions": "9.0.22"
|
||||
}
|
||||
"requested": "[10.0.14, )",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "v+KNMXj2RktQ690ijlFYniH8gggO+EVMjCZSou+NcpI2mKNAT27Dgn2UfiJKbwQ84v2Avp6Mwceqog8gvQn5Cw=="
|
||||
},
|
||||
"Microsoft.NET.ILLink.Tasks": {
|
||||
"type": "Direct",
|
||||
"requested": "[9.0.22, )",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "S61AsICGqZii54jXMY56s6xvu3PcIe9VPeBxcTAWwNt5P21l2Arcy36XfATNvZAEqoAH7OfGNzng+aoXkqhsxQ=="
|
||||
"requested": "[10.0.14, )",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "YlTamXppEQls6DYWt7RdUuwWDb0lyw/vXCaGeQpLCpsLmfwGuCkOz/vIGgMTV7ECsJcavkCOkxZXv9s8rdAHkQ=="
|
||||
},
|
||||
"MudBlazor": {
|
||||
"type": "Direct",
|
||||
"requested": "[9.12.0, )",
|
||||
"resolved": "9.12.0",
|
||||
"contentHash": "T6PQUCJe60UTSy3u1F8R2nuC06Cox6WEhon5GA2/AZNVI1WstlPSJZdGPyp6pHFpWdjPpla65piLpyJsbW+1rA==",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Components": "9.0.1",
|
||||
"Microsoft.AspNetCore.Components.Web": "9.0.1",
|
||||
"Microsoft.Extensions.Localization": "9.0.1"
|
||||
}
|
||||
"contentHash": "T6PQUCJe60UTSy3u1F8R2nuC06Cox6WEhon5GA2/AZNVI1WstlPSJZdGPyp6pHFpWdjPpla65piLpyJsbW+1rA=="
|
||||
},
|
||||
"MudBlazor.Markdown": {
|
||||
"type": "Direct",
|
||||
@@ -126,16 +119,6 @@
|
||||
"SQLitePCLRaw.config.e_sqlite3": "3.0.5"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"BouncyCastle.Cryptography": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.7.0",
|
||||
@@ -146,7 +129,7 @@
|
||||
"resolved": "3.5.1",
|
||||
"contentHash": "U5txtc3ORno73xQx9Lf2gWzfaSZnZwKHfLkTAslhlew9lxe5XbUiCt0dY1fHeAf8yRqszUAe5i/+xLC9R/Xfsw==",
|
||||
"dependencies": {
|
||||
"System.IO.Packaging": "8.0.1"
|
||||
"System.IO.Packaging": "10.0.2"
|
||||
}
|
||||
},
|
||||
"LuaCSharp.Annotations": {
|
||||
@@ -164,213 +147,48 @@
|
||||
"resolved": "0.45.0",
|
||||
"contentHash": "ObNLcA1b+0lpNNoEg256g9faMeJZi35wZW0AnKJ4nGPJe+5qkwnV26kUvQTHuanFnSX9SdvPzOO41BVJ6XarAg=="
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "WgLlLBlMczb2+QLNG6sM95OUZ0EBztz60k/N75tjIgpyu0SdpIfYytAmX/7JJAjRTZF0c/CrWaQV+SH9FuGsrA==",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Metadata": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Options": "9.0.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Components": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "6pwfbQKNtvPkbF4tCGiAKGyt6BVpu58xAXz7u2YXcUKTNmNxrymbG1mEyMc0EPzVdnquDDqTyfXM3mC1EJycxQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Authorization": "9.0.1",
|
||||
"Microsoft.AspNetCore.Components.Analyzers": "9.0.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Analyzers": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "I8Rs4LXT5UQxM5Nin2+Oj8aSY2heszSZ3EyTLgt3mxmfiRPrVO7D8NNSsf1voI2Gb0qFJceof/J5c9E+nfNuHw=="
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Forms": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "KyULVU32bLz74LWDwPEwNUEllTehzWJuM7YAsz80rMKEzvR0K8cRjRzO0fnN/nfydMeLRRlbI0xj8wnEAymLVw==",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Components": "9.0.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.Web": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "LI0vjYEd9MaDZPDQxPCn4gGYDkEC5U9rp1nWZo7rPozJxgTG2zU3WERujxTi2LeAC2ZzdXlOVCrUyPQ55LZV2A==",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Components": "9.0.1",
|
||||
"Microsoft.AspNetCore.Components.Forms": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.Primitives": "9.0.1",
|
||||
"Microsoft.JSInterop": "9.0.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Metadata": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "EZnHifamF7IFEIyjAKMtJM3I/94OIe72i3P09v5oL0twmsmfQwal6Ni3m8lbB5mge3jWFhMozeW+rUdRSqnXRQ=="
|
||||
},
|
||||
"Microsoft.Bcl.Cryptography": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "6H3QqvjxTgCt4gxVVCJVjo35Zh/gzjw7NXidIx0ghZrgYYMUja/7JJ4g39ynE/OH5YBBbUhlmirGR/AuYpNIuA=="
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "wBYt52v8cQ5abaA8jR3m+LPV8N3ymhz0pTPMvwYck9VZ9ItcYIu130qEYdsinMNt9co+4n7SMZdI1dFjJHIvNQ==",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "vY3931PYPIDBbKovGHbACmpOWvURvKNyRXfCjMh5yLW+FH6vLWeqUu2xzSCRo4Oz4tgx9GYpd0JlV5LDyAoQdg==",
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.22",
|
||||
"Microsoft.EntityFrameworkCore.Analyzers": "9.0.22",
|
||||
"Microsoft.Extensions.Caching.Memory": "9.0.22",
|
||||
"Microsoft.Extensions.Logging": "9.0.22"
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "10.0.14",
|
||||
"Microsoft.EntityFrameworkCore.Analyzers": "10.0.14"
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "H1OiSYqSi4q9LnYfr4H6qkMOiS+bMSylLkbTcjlotI0aRojjDPHS+P2JAIn+kvzd8+wcVbzD1Jw0JexBAjiK2Q=="
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "/SaznoTTFfKzxYEbCPAwwKBR3XT92DZgH4jJ3/cqs2skP3o2D+TL6i9Aaj+8Azwtu6/sRd0ve4P2mN12nfVmCw=="
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "wtYr03ZnX3a7x92WE0yELwyhN2EooJ7BTlY4N2gBPaVBsg2XwjEKyyGBLbkhc9fgKaQ6ed1fEgnHmZ9YCfTlLQ=="
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "gaANlGNTxkgODX2eeVT8jjd3AmlFilQV4DFf8qoW30+wUCm2o4N7nEHtZvnHIwfhaJni2DqcjE47Au7tC0Q5jA=="
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "BwTl8180y2ct3po1+5MYk72HY0qZsbB4nqj/bbaHi9stz23Sxsf3xcG0CtASjm0T5UzBPVLAj9CNinuWfiLx3Q==",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "Ut0kgtfoKX9QElQVEXSEAgdQc79jISWStVWSOhfPDDHNSKMwFzSXG3gtdYFTAbsBoV+8NtXdVaj4xwdqeky8UA==",
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "9.0.22",
|
||||
"Microsoft.Extensions.Caching.Memory": "9.0.22",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.Logging": "9.0.22"
|
||||
"Microsoft.EntityFrameworkCore": "10.0.14"
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Sqlite.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "AIvmI99uWB47b82svKMcevpNLhX+2VBPf/l9VJUGP+8PLBle8jwPguGwzy3MdjsM2AfVE/QoJK7mQ2Xd8e0vJw==",
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "08VGlMQ9WbK869as9Ho+VZQbM5Qu6zdorgeh6ShVwQgLYgfUBiaIm02T7spfW7Xc1MBHCvclwPgGWpvx5BYGXQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Data.Sqlite.Core": "9.0.22",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "9.0.22",
|
||||
"Microsoft.Extensions.Caching.Memory": "9.0.22",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.DependencyModel": "9.0.22",
|
||||
"Microsoft.Extensions.Logging": "9.0.22",
|
||||
"SQLitePCLRaw.core": "2.1.13",
|
||||
"System.Text.Json": "9.0.22"
|
||||
"Microsoft.Data.Sqlite.Core": "10.0.14",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "10.0.14",
|
||||
"Microsoft.Extensions.DependencyModel": "10.0.14",
|
||||
"SQLitePCLRaw.core": "2.1.13"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "hQo0hI5IDADpxo3wiGJa6A2T5InBCWPAY65J2QZAPoy+5e9MDgpRGERei7DABAPd58hnjwnpFVXa/NUjcygqmw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "V6Kzo5peqxfE5Dwsgt9ngK5hnJwI2F/QXqh2HR2naUCx1j8sGEs/wBhUib83PiaRi5Oc8Iux1nreLVwmfResDA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.Options": "9.0.22",
|
||||
"Microsoft.Extensions.Primitives": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "JTG92S+wiC49A3edjZTOk5/HMaFqaMn2/Y3RAAt9tK0Aoekfvp6ETJz3wOVsRCFqmAPX84vgcKtu/y920WBAGA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "fG8YKmh9xZbVSaKEHDQfG/BEToPezfIw9/EfIpIRVGVftJyFpp7KNqaiZmKDm2apBfjRA0iSdeyxNS9Kc842Dw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "SFzDXodpxwCTJQ9IsmqhCsh8fAElRqGtuOqwQACA7pKBj277g+A8q8zzZebk0Q+MKrHX+WFT3/i64n4BdhsMpQ=="
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "sqIODKUAUaj/im0LcKSW59JY74vMnxIVDFG61ASH6O4q5LaazjP2XRDqOzjou5bjhI1AW4F7oyOz01NsmH194A=="
|
||||
},
|
||||
"Microsoft.Extensions.FileProviders.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "HhBR/vC5PwIEkvNqOcBR0+VRYBXR5zsv8Ddsk4qj9Jh29bE+LCxd1cPx7rdK0PIANVT82vAmJcXUT7eFw7CwbA==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Localization": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "UgvX4Yb2T3tEsKT30ktZr0H7kTRPapCgEH0bdTwxiEGSdA39/hAQMvvb+vgHpqmevDU5+puyI9ujRkmmbF946w==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Localization.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Options": "9.0.1"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Localization.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "CABog43lyaZQMjmlktuImCy6zmAzRBaXqN81uPaMQjlp//ISDVYItZPh6KWpWRF4MY/B67X5oDc3JTUpfdocZw=="
|
||||
},
|
||||
"Microsoft.Extensions.Logging": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "mYX+XnqcOr1Mffohw3y91BXlLV0df848jIbT2e/h4GZ5uQBJaBdo7VuX5mWJdnpu7roTUUUMYHjYR9u/O/XRqg==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.22",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.Options": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "REayp367aujZONmJbX6ctXSZAJjgovhhIy8qoHsY50y/nXhtpPPndsXgz7EHnbZef5eCIMG0VbTjFf3/sXs5aQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Options": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "HXvtEnW4d3LdZuA2T31tT7DMkhtXOGvncxNN6cqoQLV/HDtF/TYTW/8hVy+di/w/VerPOJ5c03nhfjxkHORwiw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.22",
|
||||
"Microsoft.Extensions.Primitives": "9.0.22"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "sna268GZylvTK/y/HJgjs1fqKBDG3Yj4nsCQQNiIhKKITlvcFbEaf65FTC754VXHu1PE1HoDvXblRwi7LU8CGw=="
|
||||
},
|
||||
"Microsoft.JSInterop": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.1",
|
||||
"contentHash": "/xBwIfb0YoC2Muv6EsHjxpqZw2aKv94+i0g0FWZvqvGv3DeAy+8wipAuECVvKYEs2EIclRD41bjajHLoD6mTtw=="
|
||||
"resolved": "10.0.14",
|
||||
"contentHash": "N8OcqM0370wSXMJ3ZxO66rSElHrIgxvpfUn0vV7zRj7NvKo0nfwgEoTmC3Yz3860o60IaQ4KIPyeLIGX9EeNWA=="
|
||||
},
|
||||
"MimeKit": {
|
||||
"type": "Transitive",
|
||||
@@ -407,125 +225,90 @@
|
||||
"SQLitePCLRaw.core": "3.0.5"
|
||||
}
|
||||
},
|
||||
"System.Formats.Asn1": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "uwKFGyJaUQ8xsf+wddv512+UIU1O4reOveom3y0gpQr86P1ReAKcQa/UdOZtg1etTIHgb01/grXp00tgeGBxqA=="
|
||||
},
|
||||
"System.IO.Packaging": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.1",
|
||||
"contentHash": "KYkIOAvPexQOLDxPO2g0BVoWInnQhPpkFzRqvNrNrMhVT6kqhVr0zEb6KCHlptLFukxnZrjuMVAnxK7pOGUYrw=="
|
||||
"resolved": "10.0.2",
|
||||
"contentHash": "JTpM4z0wpoIHHDvlCU27HsXo+zVnpWib94HXQpzzr+jc/P9NYf4w353AK4MXyGq/grm1mbLi7eXsOsDU8sGmNg=="
|
||||
},
|
||||
"System.Text.Json": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "9.0.22",
|
||||
"contentHash": "bP1LqWP1h1/J/XO69m5kdLF7M1HT6YWpM7UflcIKLLTvJep8HoS6I/F8FnV/uGhqmStLHY8PuiQAmjQg+qqqcg=="
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
},
|
||||
"sharedtools": {
|
||||
"type": "Project"
|
||||
}
|
||||
},
|
||||
"net9.0/linux-arm64": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"net10.0/linux-arm64": {
|
||||
"SQLite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.53.4",
|
||||
"contentHash": "KN7jeWqgUPeBRe1FlcpZURzxomuKKEKHmBBQfg+Nx7NkY1LjKhzHvH+3ASkNvhayESE34nMBinL9CV21JfPRJw=="
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
}
|
||||
},
|
||||
"net9.0/linux-x64": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"net10.0/linux-x64": {
|
||||
"SQLite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.53.4",
|
||||
"contentHash": "KN7jeWqgUPeBRe1FlcpZURzxomuKKEKHmBBQfg+Nx7NkY1LjKhzHvH+3ASkNvhayESE34nMBinL9CV21JfPRJw=="
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
}
|
||||
},
|
||||
"net9.0/osx-arm64": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"net10.0/osx-arm64": {
|
||||
"SQLite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.53.4",
|
||||
"contentHash": "KN7jeWqgUPeBRe1FlcpZURzxomuKKEKHmBBQfg+Nx7NkY1LjKhzHvH+3ASkNvhayESE34nMBinL9CV21JfPRJw=="
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
}
|
||||
},
|
||||
"net9.0/osx-x64": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"net10.0/osx-x64": {
|
||||
"SQLite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.53.4",
|
||||
"contentHash": "KN7jeWqgUPeBRe1FlcpZURzxomuKKEKHmBBQfg+Nx7NkY1LjKhzHvH+3ASkNvhayESE34nMBinL9CV21JfPRJw=="
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
}
|
||||
},
|
||||
"net9.0/win-arm64": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"net10.0/win-arm64": {
|
||||
"SQLite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.53.4",
|
||||
"contentHash": "KN7jeWqgUPeBRe1FlcpZURzxomuKKEKHmBBQfg+Nx7NkY1LjKhzHvH+3ASkNvhayESE34nMBinL9CV21JfPRJw=="
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
}
|
||||
},
|
||||
"net9.0/win-x64": {
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Direct",
|
||||
"requested": "[10.0.13, )",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.Cryptography": "10.0.13",
|
||||
"System.Formats.Asn1": "10.0.13"
|
||||
}
|
||||
},
|
||||
"net10.0/win-x64": {
|
||||
"SQLite": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.53.4",
|
||||
"contentHash": "KN7jeWqgUPeBRe1FlcpZURzxomuKKEKHmBBQfg+Nx7NkY1LjKhzHvH+3ASkNvhayESE34nMBinL9CV21JfPRJw=="
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "10.0.13",
|
||||
"contentHash": "a+EovgC1fBnwdlQ6cn3j4JFBfKqiFaFvoAhjisOoSvazLAcIznaBzPQP0oYnvccmeXfqUH1KebVZOxSeH6rMaw=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,4 +15,5 @@
|
||||
- Fixed chats being stored although you chose "Store chats manually" or "Disable workspaces". AI Studio now stores a chat only when you click "Save chat", or not at all while workspaces are disabled. In both modes, leaving a chat whose answer is still being written asks you first and stops that answer. Chats outside of workspaces that earlier versions stored this way appear among your disappearing chats once you use workspaces again.
|
||||
- Upgraded several libraries to improve security.
|
||||
- Upgraded Tauri to v2.12.5.
|
||||
- Upgraded MudBlazor to v9.12.0.
|
||||
- Upgraded MudBlazor to v9.12.0.
|
||||
- Upgraded to .NET v10.0.14.
|
||||
Reference in new issue
Block a user