feat(#369): rewrite channels tab with full backend integration (#417)

* feat(#369): rewrite channels tab with full backend integration

- Add state, error, gateway_running, description to model
- Add test endpoint to API service
- Rewrite ViewModel with toggle, restart, test actions
- Rewrite screen with state badges, restart banner, test button
- Fix string resources and E2E test

* fix(#417): add missing import and fix ButtonSize API

- Add MessagingPlatformTestResult import to HermesApiService.kt
- Replace ButtonDefaults.ButtonSize.SMALL with ButtonDefaults.SmallButtonSize (correct M3 API)

* fix(#417): mark platformStateStyle as @Composable, remove Button size param
- @Composable annotation needed for MaterialTheme.colorScheme access
- Button/OutlinedButton size parameter not available in project's M3 version
- ktlint removed unused ButtonDefaults import

---------

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-06-29 08:56:39 +03:00
1 parent 2ae6cce929
commit c64b025a54
7 files changed
+538 -158

No files matched your search

@@ -5,8 +5,14 @@ import com.google.gson.annotations.SerializedName
data class MessagingPlatform(
val id: String,
val name: String,
val description: String? = null,
@SerializedName("docs_url") val docsUrl: String? = null,
val enabled: Boolean,
val configured: Boolean,
@SerializedName("gateway_running") val gatewayRunning: Boolean = false,
val state: String = "disabled",
@SerializedName("error_code") val errorCode: String? = null,
@SerializedName("error_message") val errorMessage: String? = null,
@SerializedName("env_vars") val envVars: List<EnvVarField>? = null,
)
@@ -14,9 +20,19 @@ data class EnvVarField(
val key: String,
val required: Boolean,
@SerializedName("is_set") val isSet: Boolean,
val description: String?,
val prompt: String?,
@SerializedName("redacted_value") val redactedValue: String? = null,
val description: String? = null,
val prompt: String? = null,
val help: String? = null,
@SerializedName("is_password") val isPassword: Boolean,
val advanced: Boolean = false,
val url: String? = null,
)
data class MessagingPlatformResponse(
@SerializedName("env_path") val envPath: String,
@SerializedName("gateway_start_command") val gatewayStartCommand: String,
val platforms: List<MessagingPlatform>,
)
data class MessagingPlatformUpdate(
@@ -25,3 +41,9 @@ data class MessagingPlatformUpdate(
@SerializedName("clear_env") val clearEnv: List<String> = emptyList(),
val profile: String? = null,
)
data class MessagingPlatformTestResult(
val ok: Boolean,
val state: String,
val message: String,
)
@@ -1,7 +0,0 @@
package com.m57.hermescontrol.data.model
data class MessagingPlatformResponse(
val env_path: String,
val gateway_start_command: String,
val platforms: List<MessagingPlatform>,
)