From 8359712cd9cc82435b2981040f01f7565b6ba9dd Mon Sep 17 00:00:00 2001 From: crissuper20 Date: Mon, 30 Mar 2026 12:00:14 -0600 Subject: [PATCH] Fix/startos UI empty interface (#3143) fix: give StartOS UI interface a non-empty id The iface object in StartOsUiComponent had id: '' (empty string). Any plugin whose action calls sdk.serviceInterface.get() with that id triggers an RPC to the host with an empty serviceInterfaceId, which Rust's ServiceInterfaceId type rejects via its ID regex (^[a-z0-9]+(-[a-z0-9]+)*$). The container runtime appends the method name to every error message as "${msg}@${method}", so the empty-string failure surfaces in the UI as: Action Failed: Deserialization Error: Invalid ID: @get-service-interface Setting id: 'startos-ui' makes it a valid, stable identifier that passes the regex and accurately names the interface. --- .../routes/system/routes/startos-ui/startos-ui.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts b/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts index 32d0191f1..404733f2b 100644 --- a/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts +++ b/web/projects/ui/src/app/routes/portal/routes/system/routes/startos-ui/startos-ui.component.ts @@ -54,7 +54,7 @@ export default class StartOsUiComponent { private readonly i18n = inject(i18nPipe) readonly iface: T.ServiceInterface = { - id: '', + id: 'startos-ui', name: 'StartOS UI', description: this.i18n.transform( 'The web user interface for your StartOS server, accessible from any browser.',