Merge branch 'main' into chunk-data

This commit is contained in:
PaulKoudelka committed 2026-08-04 18:01:25 +02:00
commit 9932b5870b
484 files changed
+45549 -2467

No files matched your search

+58 -3
View File
@@ -1,12 +1,17 @@
using AIStudio.Agents;
using AIStudio.Agents.AssistantAudit;
using AIStudio.Assistants.VisualBriefing;
using AIStudio.Settings;
using AIStudio.Tools.Databases;
using AIStudio.Tools.AIJobs;
using AIStudio.Tools.AssistantSessions;
using AIStudio.Tools.Media;
using AIStudio.Tools.PluginSystem;
using AIStudio.Tools.PluginSystem.Assistants;
using AIStudio.Tools.Rust;
using AIStudio.Tools.Services;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.Logging.Console;
@@ -87,6 +92,7 @@ internal sealed class Program
return;
}
var runtimeInfo = await rust.GetRuntimeInfo();
var builder = WebApplication.CreateBuilder();
builder.WebHost.ConfigureKestrel(kestrelServerOptions =>
{
@@ -108,6 +114,32 @@ internal sealed class Program
options.FormatterName = TerminalLogger.FORMATTER_NAME;
}).AddConsoleFormatter<TerminalLogger, ConsoleFormatterOptions>();
if(runtimeInfo.LinuxPackageType == "flatpak")
{
try
{
var tauriDataDirectory = await rust.GetDataDirectory();
if(string.IsNullOrWhiteSpace(tauriDataDirectory))
throw new InvalidOperationException("Rust returned an empty Tauri data directory.");
var dataProtectionKeysDirectory = Path.Combine(tauriDataDirectory, "data-protection-keys");
Directory.CreateDirectory(dataProtectionKeysDirectory);
var writeTestPath = Path.Combine(dataProtectionKeysDirectory, $".write-test-{Guid.NewGuid():N}");
using (new FileStream(writeTestPath, FileMode.CreateNew, FileAccess.Write, FileShare.None, 1, FileOptions.DeleteOnClose))
{
}
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(dataProtectionKeysDirectory))
.SetApplicationName("org.mindworkai.AIStudio");
}
catch(Exception exception)
{
Console.WriteLine($"Error: Failed to configure Flatpak data-protection keys in the Tauri data directory: {exception.Message}");
return;
}
}
builder.Services.AddMudExtensions();
builder.Services.AddMudServices(config =>
{
@@ -126,11 +158,24 @@ internal sealed class Program
builder.Services.AddSingleton(new MudTheme());
builder.Services.AddSingleton(MessageBus.INSTANCE);
builder.Services.AddSingleton(rust);
builder.Services.AddSingleton(typeof(RuntimeInfoResponse), runtimeInfo);
builder.Services.AddMudMarkdownClipboardService<MarkdownClipboardService>();
builder.Services.AddSingleton<SettingsManager>();
builder.Services.AddSingleton<ThreadSafeRandom>();
builder.Services.AddSingleton<AIJobService>();
builder.Services.AddSingleton<AssistantSessionService>();
builder.Services.AddSingleton<VoiceRecordingAvailabilityService>();
builder.Services.AddSingleton<GlobalShortcutService>();
builder.Services.AddSingleton<MediaTranscriptionService>();
builder.Services.AddSingleton<VisualBriefingArtifactService>();
builder.Services.AddSingleton<VisualBriefingStore>();
builder.Services.AddSingleton<VisualBriefingBuildProgressService>();
builder.Services.AddSingleton<VisualBriefingBuildOrchestrator>();
builder.Services.AddSingleton<VisualBriefingPreviewTokenService>();
builder.Services.AddSingleton<IMediaTranscriptStorage, VisualBriefingTranscriptStorage>();
builder.Services.AddSingleton<AssistantPluginInstallService>();
builder.Services.AddSingleton<UpdatePolicy>();
builder.Services.AddSingleton<AssistantPluginGenerationService>();
builder.Services.AddSingleton<DataSourceService>();
builder.Services.AddSingleton<DataSourceEmbeddingService>();
builder.Services.AddSingleton<DataSourceLocalRetrievalService>();
@@ -143,10 +188,11 @@ internal sealed class Program
builder.Services.AddTransient<AssistantPluginAuditService>();
builder.Services.AddHostedService<UpdateService>();
builder.Services.AddHostedService<TemporaryChatService>();
builder.Services.AddHostedService<TranscriptStagingCleanupService>();
builder.Services.AddHostedService<EnterpriseEnvironmentService>();
builder.Services.AddHostedService(sp => sp.GetRequiredService<DataSourceEmbeddingService>());
builder.Services.AddSingleton<DatabaseClientProvider>();
builder.Services.AddHostedService<GlobalShortcutService>();
builder.Services.AddHostedService<GlobalShortcutService>(serviceProvider => serviceProvider.GetRequiredService<GlobalShortcutService>());
builder.Services.AddHostedService<RustAvailabilityMonitorService>();
// ReSharper disable AccessToDisposedClosure
@@ -154,12 +200,17 @@ internal sealed class Program
// ReSharper restore AccessToDisposedClosure
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveServerComponents(options =>
{
options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromDays(30);
options.DisconnectedCircuitMaxRetained = 2;
})
.AddHubOptions(options =>
{
options.MaximumReceiveMessageSize = null;
options.ClientTimeoutInterval = TimeSpan.FromDays(14);
options.ClientTimeoutInterval = TimeSpan.FromSeconds(120);
options.HandshakeTimeout = TimeSpan.FromSeconds(30);
options.KeepAliveInterval = TimeSpan.FromSeconds(30);
});
builder.Services.AddSingleton(new HttpClient
@@ -224,6 +275,10 @@ internal sealed class Program
#endif
app.UseAntiforgery();
// Serves committed briefing revisions to the assistant's live preview iframe:
app.MapVisualBriefingPreview();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();