feat(#58): implement skill markdown/yaml editor UI (#121)

This commit is contained in:
M57 authored and GitHub committed 2026-06-19 23:58:34 +03:00
1 parent 022e9de195
commit 46b24593f9
27 files changed
+399 -15

No files matched your search

@@ -0,0 +1,5 @@
package com.m57.hermescontrol.data.model
data class SaveSkillContentRequest(
val content: String,
)
@@ -5,4 +5,5 @@ data class Skill(
val description: String?,
val category: String?,
val enabled: Boolean,
val content: String? = null,
)
@@ -0,0 +1,6 @@
package com.m57.hermescontrol.data.model
data class SkillContentResponse(
val name: String,
val content: String,
)
@@ -26,10 +26,12 @@ import com.m57.hermescontrol.data.model.PluginsHubResponse
import com.m57.hermescontrol.data.model.ProfileSoulResponse
import com.m57.hermescontrol.data.model.ProfilesResponse
import com.m57.hermescontrol.data.model.RawConfigResponse
import com.m57.hermescontrol.data.model.SaveSkillContentRequest
import com.m57.hermescontrol.data.model.SessionListResponse
import com.m57.hermescontrol.data.model.SessionMessagesResponse
import com.m57.hermescontrol.data.model.SetActiveProfileRequest
import com.m57.hermescontrol.data.model.Skill
import com.m57.hermescontrol.data.model.SkillContentResponse
import com.m57.hermescontrol.data.model.StatusResponse
import com.m57.hermescontrol.data.model.SystemStatsResponse
import com.m57.hermescontrol.data.model.ToggleSkillRequest
@@ -52,6 +54,17 @@ import retrofit2.http.Path
import retrofit2.http.Query
interface HermesApiService {
@GET("api/skills/{name}/content")
suspend fun getSkillContent(
@Path("name") name: String,
): Response<SkillContentResponse>
@PUT("api/skills/{name}/content")
suspend fun saveSkillContent(
@Path("name") name: String,
@Body body: SaveSkillContentRequest,
): Response<Unit>
@GET("api/status")
suspend fun getStatus(): Response<StatusResponse>
@@ -4,19 +4,32 @@ import retrofit2.Response
import java.io.IOException
sealed interface NetworkResult<out T> {
data class Success<out T>(val data: T) : NetworkResult<T>
data class Success<out T>(
val data: T,
) : NetworkResult<T>
data class Failure(val error: NetworkError) : NetworkResult<Nothing>
data class Failure(
val error: NetworkError,
) : NetworkResult<Nothing>
}
sealed interface NetworkError {
val message: String
data class Http(val code: Int, override val message: String) : NetworkError
data class Http(
val code: Int,
override val message: String,
) : NetworkError
data class Connection(override val message: String, val cause: IOException) : NetworkError
data class Connection(
override val message: String,
val cause: IOException,
) : NetworkError
data class Unknown(override val message: String, val cause: Throwable) : NetworkError
data class Unknown(
override val message: String,
val cause: Throwable,
) : NetworkError
}
fun mapHttpError(code: Int): NetworkError {