refactor(#1375): type process list and kill RPC params (#1390)

This commit is contained in:
m57 authored and GitHub committed 2026-09-29 22:36:35 +03:00
1 parent 27ce528005
commit 9a09974081
6 files changed
+113 -56

No files matched your search

@@ -0,0 +1,10 @@
package com.m57.hermescontrol.data.ws.contract
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class ProcessKillParams(
@SerialName("session_id") val sessionId: String,
@SerialName("process_id") val processId: String,
)
@@ -347,6 +347,22 @@ object RpcMethods {
JsonElement.serializer(),
)
// Passthrough JsonElement results: callers keep their existing legacy decoders.
val PROCESS_LIST: RpcMethod<SessionIdParams, JsonElement> =
RpcMethod(
WsMethods.PROCESS_LIST,
SessionIdParams.serializer(),
JsonElement.serializer(),
)
// Passthrough JsonElement results: callers keep their existing legacy decoders.
val PROCESS_KILL: RpcMethod<ProcessKillParams, JsonElement> =
RpcMethod(
WsMethods.PROCESS_KILL,
ProcessKillParams.serializer(),
JsonElement.serializer(),
)
/** Every typed method. GatewayContractTest iterates this; future migrations append here. */
val all: List<RpcMethod<*, *>> =
listOf(
@@ -392,5 +408,7 @@ object RpcMethods {
CONNECTORS_OPERATION_WAKE,
SUBAGENT_LIST,
SUBAGENT_TAIL,
PROCESS_LIST,
PROCESS_KILL,
)
}
@@ -5,7 +5,10 @@ import androidx.lifecycle.viewModelScope
import com.m57.hermescontrol.data.model.ProcessInfo
import com.m57.hermescontrol.data.session.ActiveSessionHolder
import com.m57.hermescontrol.data.ws.HermesWsClient
import com.m57.hermescontrol.data.ws.WsMethods
import com.m57.hermescontrol.data.ws.contract.ProcessKillParams
import com.m57.hermescontrol.data.ws.contract.RpcMethods
import com.m57.hermescontrol.data.ws.contract.SessionIdParams
import com.m57.hermescontrol.data.ws.toAny
import com.m57.hermescontrol.ui.common.ToastHost
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -67,13 +70,8 @@ class ProcessesViewModel :
_uiState.update { it.copy(isLoading = true, errorMessage = null) }
viewModelScope.launch {
try {
val result =
HermesWsClient
.request(
WsMethods.PROCESS_LIST,
mapOf("session_id" to sessionId),
).await()
val processes = parseProcessList(result)
val result = HermesWsClient.call(RpcMethods.PROCESS_LIST, SessionIdParams(sessionId))
val processes = parseProcessList(result.toAny())
_uiState.update {
it.copy(
isLoading = false,
@@ -105,14 +103,7 @@ class ProcessesViewModel :
_uiState.update { it.copy(killingId = processId) }
viewModelScope.launch {
try {
HermesWsClient
.request(
WsMethods.PROCESS_KILL,
mapOf(
"process_id" to processId,
"session_id" to sessionId,
),
).await()
HermesWsClient.call(RpcMethods.PROCESS_KILL, ProcessKillParams(sessionId, processId))
_uiState.update { it.copy(killingId = null, toastMessage = "Process killed") }
load()
} catch (e: Exception) {