From d5fa70b34b754f244edb083a169dce461ba6fc6e Mon Sep 17 00:00:00 2001 From: M57 <41645758+Hy4ri@users.noreply.github.com> Date: Sun, 5 Jul 2026 13:02:14 +0300 Subject: [PATCH] fix(chat): support session IDs containing slashes in Retrofit endpoints (#473) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(chat): support session IDs containing slashes in Retrofit endpoints Set encoded = true on the @Path("id") annotations for all session endpoints to prevent URL-encoding slashes, which caused 404 errors. * chore: clean up inline comments — drop kanban metadata, align issue ref to #468 --------- Co-authored-by: M57 --- .../data/remote/HermesApiService.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/m57/hermescontrol/data/remote/HermesApiService.kt b/app/src/main/java/com/m57/hermescontrol/data/remote/HermesApiService.kt index 10177622..9950e430 100644 --- a/app/src/main/java/com/m57/hermescontrol/data/remote/HermesApiService.kt +++ b/app/src/main/java/com/m57/hermescontrol/data/remote/HermesApiService.kt @@ -126,7 +126,9 @@ interface HermesApiService { @GET("api/sessions/{id}/messages") suspend fun getSessionMessages( - @Path("id") sessionId: String, + // Preserve slashes in session IDs — backend generates IDs containing '/' characters (issue #468). + // Contract: The server-generated sessionId must only contain URL-safe characters (no ?, #, or spaces). + @Path("id", encoded = true) sessionId: String, ): Response @GET("api/sessions/stats") @@ -134,7 +136,9 @@ interface HermesApiService { @PUT("api/sessions/{id}/rename") suspend fun renameSession( - @Path("id") sessionId: String, + // Preserve slashes in session IDs — backend generates IDs containing '/' characters (issue #468). + // Contract: The server-generated sessionId must only contain URL-safe characters (no ?, #, or spaces). + @Path("id", encoded = true) sessionId: String, @Body body: SessionRenameRequest, ): Response @@ -145,7 +149,9 @@ interface HermesApiService { @DELETE("api/sessions/{id}") suspend fun deleteSession( - @Path("id") sessionId: String, + // Preserve slashes in session IDs — backend generates IDs containing '/' characters (issue #468). + // Contract: The server-generated sessionId must only contain URL-safe characters (no ?, #, or spaces). + @Path("id", encoded = true) sessionId: String, ): Response @POST("api/sessions/prune") @@ -155,7 +161,9 @@ interface HermesApiService { @GET("api/sessions/{id}/prompt") suspend fun getSessionPrompt( - @Path("id") sessionId: String, + // Preserve slashes in session IDs — backend generates IDs containing '/' characters (issue #468). + // Contract: The server-generated sessionId must only contain URL-safe characters (no ?, #, or spaces). + @Path("id", encoded = true) sessionId: String, ): Response @GET("api/system/stats")