mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-08-28 19:11:03 +08:00
refactor(jetbrains): rename backend classes to KiloBackend* prefix and move to backend package
Rename server package to ai.kilocode.backend and apply consistent KiloBackend* prefix: KiloBackendAppService, KiloBackendCliManager, KiloBackendConnectionService, KiloBackendHttpClients, KiloBackendProjectService.
This commit is contained in:
+5
-5
@@ -1,4 +1,4 @@
|
||||
package ai.kilocode.server
|
||||
package ai.kilocode.backend
|
||||
|
||||
import ai.kilocode.jetbrains.api.client.DefaultApi
|
||||
import ai.kilocode.jetbrains.api.model.Config
|
||||
@@ -19,20 +19,20 @@ import kotlinx.coroutines.launch
|
||||
* loads project-independent data after the connection is established.
|
||||
*
|
||||
* This is the single entry point for the CLI backend. Both
|
||||
* [KiloProjectService] and [KiloApiService][ai.kilocode.KiloApiService]
|
||||
* [KiloBackendProjectService] and [KiloApiService][ai.kilocode.KiloApiService]
|
||||
* (frontend) reach the CLI through this service.
|
||||
*
|
||||
* Data flows use the generated OpenAPI model types directly —
|
||||
* no intermediate DTOs needed at the backend layer.
|
||||
*/
|
||||
@Service(Service.Level.APP)
|
||||
class KiloAppService(private val cs: CoroutineScope) : Disposable {
|
||||
class KiloBackendAppService(private val cs: CoroutineScope) : Disposable {
|
||||
|
||||
companion object {
|
||||
private val LOG = Logger.getInstance(KiloAppService::class.java)
|
||||
private val LOG = Logger.getInstance(KiloBackendAppService::class.java)
|
||||
}
|
||||
|
||||
private val server = ServerManager(cs)
|
||||
private val server = KiloBackendCliManager(cs)
|
||||
private val connection = KiloConnectionService(cs, server)
|
||||
|
||||
private var router: Job? = null
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
package ai.kilocode.server
|
||||
package ai.kilocode.backend
|
||||
|
||||
import com.intellij.openapi.application.PathManager
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
@@ -27,9 +27,9 @@ import java.util.concurrent.TimeUnit
|
||||
* All concurrent callers of [init] share the same startup flow — only one
|
||||
* CLI process is ever spawned.
|
||||
*
|
||||
* Not a service — owned and instantiated by [KiloAppService].
|
||||
* Not a service — owned and instantiated by [KiloBackendAppService].
|
||||
*/
|
||||
class ServerManager(private val cs: CoroutineScope) {
|
||||
class KiloBackendCliManager(private val cs: CoroutineScope) {
|
||||
|
||||
sealed class ServerState {
|
||||
data class Ready(val port: Int, val password: String) : ServerState()
|
||||
@@ -38,7 +38,7 @@ class ServerManager(private val cs: CoroutineScope) {
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOG = Logger.getInstance(ServerManager::class.java)
|
||||
private val LOG = Logger.getInstance(KiloBackendCliManager::class.java)
|
||||
private const val STARTUP_TIMEOUT_MS = 30_000L
|
||||
private const val KILL_TIMEOUT_SECONDS = 5L
|
||||
private val PORT_REGEX = Regex("""listening on http://[\w.]+:(\d+)""")
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
package ai.kilocode.server
|
||||
package ai.kilocode.backend
|
||||
|
||||
import ai.kilocode.jetbrains.api.client.DefaultApi
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
@@ -44,11 +44,11 @@ data class SseEvent(val type: String, val data: String)
|
||||
* The generated [DefaultApi] is configured with [apiClient] and exposed via [api]
|
||||
* for typed access to all CLI server endpoints.
|
||||
*
|
||||
* Not a service — owned and instantiated by [KiloAppService].
|
||||
* Not a service — owned and instantiated by [KiloBackendAppService].
|
||||
*/
|
||||
class KiloConnectionService(
|
||||
private val cs: CoroutineScope,
|
||||
private val server: ServerManager,
|
||||
private val cs: CoroutineScope,
|
||||
private val server: KiloBackendCliManager,
|
||||
) {
|
||||
|
||||
companion object {
|
||||
@@ -138,18 +138,18 @@ class KiloConnectionService(
|
||||
|
||||
val result = server.init()
|
||||
|
||||
if (result is ServerManager.ServerState.Error) {
|
||||
if (result is KiloBackendCliManager.ServerState.Error) {
|
||||
setState(ConnectionState.Error(result.message))
|
||||
return
|
||||
}
|
||||
|
||||
val ready = result as ServerManager.ServerState.Ready
|
||||
val ready = result as KiloBackendCliManager.ServerState.Ready
|
||||
port = ready.port
|
||||
password = ready.password
|
||||
|
||||
// Create dual OkHttp clients (bundled — no IntelliJ platform deps)
|
||||
val ac = KiloHttpClients.api(password)
|
||||
val hc = KiloHttpClients.health(password)
|
||||
val ac = KiloBackendHttpClients.api(password)
|
||||
val hc = KiloBackendHttpClients.health(password)
|
||||
apiClient = ac
|
||||
healthClient = hc
|
||||
|
||||
@@ -285,9 +285,9 @@ class KiloConnectionService(
|
||||
|
||||
private fun close() {
|
||||
api = null
|
||||
apiClient?.let { KiloHttpClients.shutdown(it) }
|
||||
apiClient?.let { KiloBackendHttpClients.shutdown(it) }
|
||||
apiClient = null
|
||||
healthClient?.let { KiloHttpClients.shutdown(it) }
|
||||
healthClient?.let { KiloBackendHttpClients.shutdown(it) }
|
||||
healthClient = null
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package ai.kilocode.server
|
||||
package ai.kilocode.backend
|
||||
|
||||
import okhttp3.ConnectionPool
|
||||
import okhttp3.Interceptor
|
||||
@@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit
|
||||
* Both clients bundle Basic Auth via an interceptor and are fully independent
|
||||
* of any IntelliJ-platform-provided HTTP stack.
|
||||
*/
|
||||
object KiloHttpClients {
|
||||
object KiloBackendHttpClients {
|
||||
|
||||
private const val CONNECT_TIMEOUT_MS = 10_000L
|
||||
private const val HEALTH_TIMEOUT_MS = 3_000L
|
||||
+5
-5
@@ -1,4 +1,4 @@
|
||||
package ai.kilocode.server
|
||||
package ai.kilocode.backend
|
||||
|
||||
import ai.kilocode.jetbrains.api.client.DefaultApi
|
||||
import ai.kilocode.rpc.dto.ConnectionStateDto
|
||||
@@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.map
|
||||
|
||||
/**
|
||||
* Project-level backend service that delegates to the app-level
|
||||
* [KiloAppService] and scopes CLI API calls to this project's
|
||||
* [KiloBackendAppService] and scopes CLI API calls to this project's
|
||||
* working directory.
|
||||
*
|
||||
* The VS Code extension likewise scopes calls via `x-kilo-directory`.
|
||||
@@ -23,15 +23,15 @@ import kotlinx.coroutines.flow.map
|
||||
* parameter to each generated API method.
|
||||
*/
|
||||
@Service(Service.Level.PROJECT)
|
||||
class KiloProjectService(
|
||||
class KiloBackendProjectService(
|
||||
private val project: Project,
|
||||
private val cs: CoroutineScope,
|
||||
) {
|
||||
companion object {
|
||||
private val LOG = Logger.getInstance(KiloProjectService::class.java)
|
||||
private val LOG = Logger.getInstance(KiloBackendProjectService::class.java)
|
||||
}
|
||||
|
||||
private val app: KiloAppService
|
||||
private val app: KiloBackendAppService
|
||||
get() = service()
|
||||
|
||||
/** Project working directory sent as the `directory` parameter. */
|
||||
+3
-4
@@ -4,22 +4,21 @@ package ai.kilocode.rpc
|
||||
|
||||
import ai.kilocode.rpc.dto.ConnectionStateDto
|
||||
import ai.kilocode.rpc.dto.HealthDto
|
||||
import ai.kilocode.server.KiloProjectService
|
||||
import ai.kilocode.backend.KiloBackendProjectService
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.platform.project.ProjectId
|
||||
import com.intellij.platform.project.findProjectOrNull
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.emptyFlow
|
||||
|
||||
/**
|
||||
* Backend implementation of [KiloProjectRpcApi].
|
||||
*
|
||||
* Resolves the project from the [ProjectId] passed by the frontend
|
||||
* and delegates to the project-level [KiloProjectService].
|
||||
* and delegates to the project-level [KiloBackendProjectService].
|
||||
*/
|
||||
class KiloProjectRpcApiImpl : KiloProjectRpcApi {
|
||||
|
||||
private fun resolve(id: ProjectId): KiloProjectService {
|
||||
private fun resolve(id: ProjectId): KiloBackendProjectService {
|
||||
val project = id.findProjectOrNull()
|
||||
?: throw IllegalStateException("Project not found for id: $id")
|
||||
return project.service()
|
||||
|
||||
Reference in New Issue
Block a user