From b37f70d7ff9db37ff6335aa149859dfe5a48111e Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 31 May 2026 19:10:19 +0200 Subject: [PATCH] Added startup path & Linux package type to the info page (#785) --- .../Assistants/I18N/allTexts.lua | 21 ++++++++ .../Pages/Information.razor | 20 +++++++ .../Pages/Information.razor.cs | 16 ++++++ .../plugin.lua | 21 ++++++++ .../plugin.lua | 21 ++++++++ .../Tools/Rust/RuntimeInfoResponse.cs | 3 ++ .../Tools/Services/RustService.App.cs | 6 +++ .../wwwroot/changelog/v26.6.1.md | 1 + runtime/src/environment.rs | 53 +++++++++++++++++++ runtime/src/runtime_api.rs | 1 + 10 files changed, 163 insertions(+) create mode 100644 app/MindWork AI Studio/Tools/Rust/RuntimeInfoResponse.cs diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 1b3cadef..1f0bc6f0 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -6127,6 +6127,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1630237140"] = "AI Studio create -- Consent: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T171952677"] = "Consent:" +-- Copies the executable path to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1722690800"] = "Copies the executable path to the clipboard" + -- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1772678682"] = "This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant." @@ -6208,6 +6211,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557066213"] = "Used Open Source -- Build time UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T260228112"] = "Build time" +-- unknown +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2608177081"] = "unknown" + -- This library is used to create temporary folders for saving the certificate and private key for communication with Qdrant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2619858133"] = "This library is used to create temporary folders for saving the certificate and private key for communication with Qdrant." @@ -6277,6 +6283,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3178730036"] = "Have feature ide -- Hide Details UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3183837919"] = "Hide Details" +-- Linux package +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3196139293"] = "Linux package" + -- External HTTPS custom root certificates are active. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3208455732"] = "External HTTPS custom root certificates are active." @@ -6352,6 +6361,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3874337003"] = "This library is -- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3908558992"] = "Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json." +-- not applicable +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T396609403"] = "not applicable" + -- Copies the allowed host configuration to the clipboard UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3970230163"] = "Copies the allowed host configuration to the clipboard" @@ -6379,9 +6391,15 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4079152443"] = "This library is -- Community & Code UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4158546761"] = "Community & Code" +-- Executable path +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4164953312"] = "Executable path" + -- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4184485147"] = "We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant." +-- Copies the working directory to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4194302113"] = "Copies the working directory to the clipboard" + -- Certificate bundle: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4197142390"] = "Certificate bundle:" @@ -6418,6 +6436,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T70364248"] = "not active" -- Loaded root certificates: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T709525418"] = "Loaded root certificates:" +-- Working directory +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T768480635"] = "Working directory" + -- Copies the config ID to the clipboard UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T788846912"] = "Copies the config ID to the clipboard" diff --git a/app/MindWork AI Studio/Pages/Information.razor b/app/MindWork AI Studio/Pages/Information.razor index 6122563a..3d408d8c 100644 --- a/app/MindWork AI Studio/Pages/Information.razor +++ b/app/MindWork AI Studio/Pages/Information.razor @@ -48,6 +48,26 @@ + +
+ + @this.WorkingDirectory + + +
+
+ +
+ + @this.ExecutablePath + + +
+
+ @if (OperatingSystem.IsLinux()) + { + + } @switch (HasAnyActiveEnvironment) { diff --git a/app/MindWork AI Studio/Pages/Information.razor.cs b/app/MindWork AI Studio/Pages/Information.razor.cs index 26fe545f..45d21d8b 100644 --- a/app/MindWork AI Studio/Pages/Information.razor.cs +++ b/app/MindWork AI Studio/Pages/Information.razor.cs @@ -41,6 +41,7 @@ public partial class Information : MSGComponentBase private string osLanguage = string.Empty; private string osUserName = string.Empty; + private RuntimeInfoResponse runtimeInfo; private static string VersionApp => $"MindWork AI Studio: v{META_DATA.Version} (commit {META_DATA.AppCommitHash}, build {META_DATA.BuildNum}, {META_DATA_ARCH.Architecture.ToRID().ToUserFriendlyName()})"; @@ -52,6 +53,20 @@ public partial class Information : MSGComponentBase private string OSUserName => $"{T("Username provided by the OS")}: '{this.osUserName}'"; + private string WorkingDirectory => $"{T("Working directory")}: {this.runtimeInfo.WorkingDirectory}"; + + private string ExecutablePath => $"{T("Executable path")}: {this.runtimeInfo.ExecutablePath}"; + + private string LinuxPackageType => $"{T("Linux package")}: {this.LinuxPackageTypeDisplayName}"; + + private string LinuxPackageTypeDisplayName => this.runtimeInfo.LinuxPackageType switch + { + "appimage" => "AppImage", + "flatpak" => "Flatpak", + "unknown" => T("unknown"), + _ => T("not applicable") + }; + private string VersionRust => $"{T("Used Rust compiler")}: v{META_DATA.RustVersion}"; private string VersionDotnetRuntime => $"{T("Used .NET runtime")}: v{META_DATA.DotnetVersion}"; @@ -148,6 +163,7 @@ public partial class Information : MSGComponentBase this.osLanguage = await this.RustService.ReadUserLanguage(); this.osUserName = await this.RustService.ReadUserName(); + this.runtimeInfo = await this.RustService.GetRuntimeInfo(); this.logPaths = await this.RustService.GetLogPaths(); await this.RefreshDatabaseInfo(CancellationToken.None); diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index b004fe74..e7b16e95 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -6129,6 +6129,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1630237140"] = "AI Studio erstel -- Consent: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T171952677"] = "Zustimmung:" +-- Copies the executable path to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1722690800"] = "Kopiert den Pfad der ausführbaren Datei in die Zwischenablage" + -- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1772678682"] = "Diese Bibliothek wird verwendet, um die Unterschiede zwischen zwei Texten anzuzeigen. Das ist zum Beispiel für den Grammatik- und Rechtschreibassistenten notwendig." @@ -6210,6 +6213,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557066213"] = "Verwendete Open- -- Build time UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T260228112"] = "Build-Zeit" +-- unknown +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2608177081"] = "unbekannt" + -- This library is used to create temporary folders for saving the certificate and private key for communication with Qdrant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2619858133"] = "Diese Bibliothek wird verwendet, um temporäre Ordner zu erstellen, in denen das Zertifikat und der private Schlüssel für die Kommunikation mit Qdrant gespeichert werden." @@ -6279,6 +6285,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3178730036"] = "Haben Sie Ideen -- Hide Details UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3183837919"] = "Details ausblenden" +-- Linux package +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3196139293"] = "Linux-Paket" + -- External HTTPS custom root certificates are active. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3208455732"] = "Externe Stammzertifikate sind aktiv." @@ -6354,6 +6363,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3874337003"] = "Diese Bibliothek -- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3908558992"] = "Jetzt haben wir mehrere Systeme, einige entwickelt in .NET und andere in Rust. Das Datenformat JSON ist dafür zuständig, Daten zwischen beiden Welten zu übersetzen (dies nennt man Serialisierung und Deserialisierung von Daten). In der Rust-Welt übernimmt Serde diese Aufgabe. Das Pendant in der .NET-Welt ist ein fester Bestandteil von .NET und findet sich in System.Text.Json." +-- not applicable +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T396609403"] = "nicht zutreffend" + -- Copies the allowed host configuration to the clipboard UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3970230163"] = "Kopiert die zulässige Host-Konfiguration in die Zwischenablage" @@ -6381,9 +6393,15 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4079152443"] = "Diese Bibliothek -- Community & Code UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4158546761"] = "Community & Code" +-- Executable path +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4164953312"] = "Pfad der ausführbaren Datei" + -- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4184485147"] = "Wir verwenden das HtmlAgilityPack, um Inhalte aus dem Internet zu extrahieren. Das ist zum Beispiel notwendig, wenn Sie eine URL als Eingabe für einen Assistenten angeben." +-- Copies the working directory to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4194302113"] = "Kopiert das Arbeitsverzeichnis in die Zwischenablage" + -- Certificate bundle: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4197142390"] = "Zertifikatsbündel:" @@ -6420,6 +6438,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T70364248"] = "nicht aktiv" -- Loaded root certificates: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T709525418"] = "Geladene Stammzertifikate:" +-- Working directory +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T768480635"] = "Arbeitsverzeichnis" + -- Copies the config ID to the clipboard UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T788846912"] = "Kopiert die Konfigurations-ID in die Zwischenablage" diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index 05f3fbd7..a5e79f17 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -6129,6 +6129,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1630237140"] = "AI Studio create -- Consent: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T171952677"] = "Consent:" +-- Copies the executable path to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1722690800"] = "Copies the executable path to the clipboard" + -- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1772678682"] = "This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant." @@ -6210,6 +6213,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557066213"] = "Used Open Source -- Build time UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T260228112"] = "Build time" +-- unknown +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2608177081"] = "unknown" + -- This library is used to create temporary folders for saving the certificate and private key for communication with Qdrant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2619858133"] = "This library is used to create temporary folders for saving the certificate and private key for communication with Qdrant." @@ -6279,6 +6285,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3178730036"] = "Have feature ide -- Hide Details UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3183837919"] = "Hide Details" +-- Linux package +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3196139293"] = "Linux package" + -- External HTTPS custom root certificates are active. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3208455732"] = "External HTTPS custom root certificates are active." @@ -6354,6 +6363,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3874337003"] = "This library is -- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3908558992"] = "Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json." +-- not applicable +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T396609403"] = "not applicable" + -- Copies the allowed host configuration to the clipboard UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3970230163"] = "Copies the allowed host configuration to the clipboard" @@ -6381,9 +6393,15 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4079152443"] = "This library is -- Community & Code UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4158546761"] = "Community & Code" +-- Executable path +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4164953312"] = "Executable path" + -- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4184485147"] = "We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant." +-- Copies the working directory to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4194302113"] = "Copies the working directory to the clipboard" + -- Certificate bundle: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4197142390"] = "Certificate bundle:" @@ -6420,6 +6438,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T70364248"] = "not active" -- Loaded root certificates: UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T709525418"] = "Loaded root certificates:" +-- Working directory +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T768480635"] = "Working directory" + -- Copies the config ID to the clipboard UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T788846912"] = "Copies the config ID to the clipboard" diff --git a/app/MindWork AI Studio/Tools/Rust/RuntimeInfoResponse.cs b/app/MindWork AI Studio/Tools/Rust/RuntimeInfoResponse.cs new file mode 100644 index 00000000..435e89c1 --- /dev/null +++ b/app/MindWork AI Studio/Tools/Rust/RuntimeInfoResponse.cs @@ -0,0 +1,3 @@ +namespace AIStudio.Tools.Rust; + +public readonly record struct RuntimeInfoResponse(string WorkingDirectory, string ExecutablePath, string LinuxPackageType); \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Services/RustService.App.cs b/app/MindWork AI Studio/Tools/Services/RustService.App.cs index 1602ecc4..9fd0227f 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.App.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.App.cs @@ -120,6 +120,12 @@ public sealed partial class RustService return await response.Content.ReadAsStringAsync(); } + public async Task GetRuntimeInfo() + { + var response = await this.http.GetFromJsonAsync("/system/runtime/info", this.jsonRustSerializerOptions); + return response; + } + /// /// Requests the Rust runtime to exit the entire desktop application. /// diff --git a/app/MindWork AI Studio/wwwroot/changelog/v26.6.1.md b/app/MindWork AI Studio/wwwroot/changelog/v26.6.1.md index 6a8cd393..83665a06 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v26.6.1.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v26.6.1.md @@ -1,4 +1,5 @@ # v26.6.1, build 241 (2026-06-xx xx:xx UTC) - Added support for up to 100 thousand enterprise configuration slots, using fixed-width slot names such as `config_00000` while keeping the existing first ten slot names compatible. - Added support for managed custom root certificate bundles and host allowlists for external HTTPS requests, helping Flatpak deployments connect to organization-internal services with private root CAs while keeping built-in cloud provider endpoints on system trust. +- Added startup path and Linux package type details to the information page to make support easier. - Improved the enterprise configuration details on the information page by showing where each configuration comes from and which configuration slot was used. diff --git a/runtime/src/environment.rs b/runtime/src/environment.rs index 989153cd..202e1b06 100644 --- a/runtime/src/environment.rs +++ b/runtime/src/environment.rs @@ -60,6 +60,59 @@ pub async fn read_user_name(_token: APIToken) -> String { }) } +#[derive(Clone, Debug, PartialEq, Eq, Serialize)] +pub struct RuntimeInfo { + pub working_directory: String, + pub executable_path: String, + pub linux_package_type: String, +} + +pub async fn get_runtime_info(_token: APIToken) -> Json { + Json(RuntimeInfo { + working_directory: env::current_dir() + .map(|path| path.to_string_lossy().into_owned()) + .unwrap_or_default(), + executable_path: env::current_exe() + .map(|path| path.to_string_lossy().into_owned()) + .unwrap_or_default(), + linux_package_type: detect_linux_package_type().to_string(), + }) +} + +#[cfg(target_os = "linux")] +fn detect_linux_package_type() -> &'static str { + if is_flatpak() { + "flatpak" + } else if is_appimage() { + "appimage" + } else { + "unknown" + } +} + +#[cfg(not(target_os = "linux"))] +fn detect_linux_package_type() -> &'static str { + "not_applicable" +} + +#[cfg(target_os = "linux")] +fn is_flatpak() -> bool { + env_var_has_value("FLATPAK_ID") + || Path::new("/.flatpak-info").is_file() + || env::var("container") + .is_ok_and(|value| value.trim().eq_ignore_ascii_case("flatpak")) +} + +#[cfg(target_os = "linux")] +fn is_appimage() -> bool { + env_var_has_value("APPIMAGE") || env_var_has_value("APPDIR") +} + +#[cfg(target_os = "linux")] +fn env_var_has_value(key: &str) -> bool { + env::var(key).is_ok_and(|value| !value.trim().is_empty()) +} + /// Returns true if the application is running in development mode. pub fn is_dev() -> bool { cfg!(debug_assertions) diff --git a/runtime/src/runtime_api.rs b/runtime/src/runtime_api.rs index 89f6cec0..590acab2 100644 --- a/runtime/src/runtime_api.rs +++ b/runtime/src/runtime_api.rs @@ -47,6 +47,7 @@ pub fn start_runtime_api() { .route("/secrets/delete", post(crate::secret::delete_secret)) .route("/system/directories/config", get(crate::environment::get_config_directory)) .route("/system/directories/data", get(crate::environment::get_data_directory)) + .route("/system/runtime/info", get(crate::environment::get_runtime_info)) .route("/system/language", get(crate::environment::read_user_language)) .route("/system/username", get(crate::environment::read_user_name)) .route("/system/enterprise/config/id", get(crate::environment::read_enterprise_env_config_id))