From 5238d5a668b6cb5259d4ad1b9691c00efe1bf812 Mon Sep 17 00:00:00 2001 From: Kohei Date: Thu, 26 Feb 2026 19:05:00 +0900 Subject: [PATCH] feat: add :backend:api module with interfaces and models (Step 2) Add the backend API module skeleton with BackendLifecycle interface, BackendState enum, NoopBackendLifecycle, GatewaySettings, and GatewaySettingsStore for the dual-flavor architecture. Co-Authored-By: Claude Opus 4.6 --- android/backend/api/build.gradle.kts | 21 +++++++++++++++++++ .../backend/api/src/main/AndroidManifest.xml | 2 ++ .../clawdroid/backend/api/BackendLifecycle.kt | 10 +++++++++ .../io/clawdroid/backend/api/BackendState.kt | 3 +++ .../clawdroid/backend/api/GatewaySettings.kt | 7 +++++++ .../backend/api/GatewaySettingsStore.kt | 8 +++++++ .../backend/api/NoopBackendLifecycle.kt | 11 ++++++++++ android/settings.gradle.kts | 1 + 8 files changed, 63 insertions(+) create mode 100644 android/backend/api/build.gradle.kts create mode 100644 android/backend/api/src/main/AndroidManifest.xml create mode 100644 android/backend/api/src/main/java/io/clawdroid/backend/api/BackendLifecycle.kt create mode 100644 android/backend/api/src/main/java/io/clawdroid/backend/api/BackendState.kt create mode 100644 android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettings.kt create mode 100644 android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettingsStore.kt create mode 100644 android/backend/api/src/main/java/io/clawdroid/backend/api/NoopBackendLifecycle.kt diff --git a/android/backend/api/build.gradle.kts b/android/backend/api/build.gradle.kts new file mode 100644 index 000000000..9b18065e7 --- /dev/null +++ b/android/backend/api/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + alias(libs.plugins.android.library) +} + +android { + namespace = "io.clawdroid.backend.api" + compileSdk = libs.versions.android.compileSdk.get().toInt() + + defaultConfig { + minSdk = libs.versions.android.minSdk.get().toInt() + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } +} + +dependencies { + implementation(libs.coroutines.android) +} diff --git a/android/backend/api/src/main/AndroidManifest.xml b/android/backend/api/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8072ee00d --- /dev/null +++ b/android/backend/api/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/android/backend/api/src/main/java/io/clawdroid/backend/api/BackendLifecycle.kt b/android/backend/api/src/main/java/io/clawdroid/backend/api/BackendLifecycle.kt new file mode 100644 index 000000000..d407e3d84 --- /dev/null +++ b/android/backend/api/src/main/java/io/clawdroid/backend/api/BackendLifecycle.kt @@ -0,0 +1,10 @@ +package io.clawdroid.backend.api + +import kotlinx.coroutines.flow.StateFlow + +interface BackendLifecycle { + val state: StateFlow + val isManaged: Boolean + suspend fun start() + suspend fun stop() +} diff --git a/android/backend/api/src/main/java/io/clawdroid/backend/api/BackendState.kt b/android/backend/api/src/main/java/io/clawdroid/backend/api/BackendState.kt new file mode 100644 index 000000000..145c60d7d --- /dev/null +++ b/android/backend/api/src/main/java/io/clawdroid/backend/api/BackendState.kt @@ -0,0 +1,3 @@ +package io.clawdroid.backend.api + +enum class BackendState { STOPPED, STARTING, RUNNING, ERROR } diff --git a/android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettings.kt b/android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettings.kt new file mode 100644 index 000000000..3626af99d --- /dev/null +++ b/android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettings.kt @@ -0,0 +1,7 @@ +package io.clawdroid.backend.api + +data class GatewaySettings( + val wsPort: Int = 18793, + val httpPort: Int = 18790, + val apiKey: String = "", +) diff --git a/android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettingsStore.kt b/android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettingsStore.kt new file mode 100644 index 000000000..48bf5ccfb --- /dev/null +++ b/android/backend/api/src/main/java/io/clawdroid/backend/api/GatewaySettingsStore.kt @@ -0,0 +1,8 @@ +package io.clawdroid.backend.api + +import kotlinx.coroutines.flow.StateFlow + +interface GatewaySettingsStore { + val settings: StateFlow + suspend fun update(settings: GatewaySettings) +} diff --git a/android/backend/api/src/main/java/io/clawdroid/backend/api/NoopBackendLifecycle.kt b/android/backend/api/src/main/java/io/clawdroid/backend/api/NoopBackendLifecycle.kt new file mode 100644 index 000000000..2da1632d8 --- /dev/null +++ b/android/backend/api/src/main/java/io/clawdroid/backend/api/NoopBackendLifecycle.kt @@ -0,0 +1,11 @@ +package io.clawdroid.backend.api + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +class NoopBackendLifecycle : BackendLifecycle { + override val state: StateFlow = MutableStateFlow(BackendState.RUNNING) + override val isManaged: Boolean = false + override suspend fun start() {} + override suspend fun stop() {} +} diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts index 533b4eb99..c8eb14336 100644 --- a/android/settings.gradle.kts +++ b/android/settings.gradle.kts @@ -18,3 +18,4 @@ include(":feature:chat") include(":core:domain") include(":core:data") include(":core:ui") +include(":backend:api")