From 2e2f3d924f369bddd5481c86ed6ea2620c61d326 Mon Sep 17 00:00:00 2001 From: kirillk Date: Sun, 31 May 2026 12:22:41 -0400 Subject: [PATCH] fix(jetbrains): keep sandbox telemetry local --- .../kotlin/ai/kilocode/backend/dev/KiloDevMode.kt | 4 +++- .../backend/telemetry/KiloBackendTelemetry.kt | 4 ++-- .../client/telemetry/KiloTelemetryService.kt | 6 ++++++ .../src/main/kotlin/ai/kilocode/log/KiloLog.kt | 15 ++++++--------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/dev/KiloDevMode.kt b/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/dev/KiloDevMode.kt index 80f042bfc0..fedc21b82f 100644 --- a/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/dev/KiloDevMode.kt +++ b/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/dev/KiloDevMode.kt @@ -1,5 +1,7 @@ package ai.kilocode.backend.dev +import ai.kilocode.log.KiloEnvironment + object KiloDevMode { - fun enabled(): Boolean = System.getProperty("idea.plugin.in.sandbox.mode", "false").toBoolean() + fun enabled(): Boolean = KiloEnvironment.sandbox() } diff --git a/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/telemetry/KiloBackendTelemetry.kt b/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/telemetry/KiloBackendTelemetry.kt index dd0b1571e3..1d4f0d61a2 100644 --- a/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/telemetry/KiloBackendTelemetry.kt +++ b/packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/telemetry/KiloBackendTelemetry.kt @@ -20,7 +20,7 @@ class KiloBackendTelemetry( suspend fun capture(http: OkHttpClient?, port: Int, event: String, properties: Map) { val body = payload(event, properties) if (KiloDevMode.enabled()) { - log.debug { "telemetry capture dev-mode: $body" } + log.info("telemetry capture sandbox: $body") return } if (http == null || port <= 0) return @@ -30,7 +30,7 @@ class KiloBackendTelemetry( suspend fun setEnabled(http: OkHttpClient?, port: Int, enabled: Boolean) { val body = JsonObject(mapOf("enabled" to JsonPrimitive(enabled))).toString() if (KiloDevMode.enabled()) { - log.debug { "telemetry setEnabled dev-mode: $body" } + log.info("telemetry setEnabled sandbox: $body") return } if (http == null || port <= 0) return diff --git a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/telemetry/KiloTelemetryService.kt b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/telemetry/KiloTelemetryService.kt index d299aeda4c..b426432789 100644 --- a/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/telemetry/KiloTelemetryService.kt +++ b/packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/telemetry/KiloTelemetryService.kt @@ -2,6 +2,7 @@ package ai.kilocode.client.telemetry +import ai.kilocode.log.KiloEnvironment import ai.kilocode.log.KiloLog import ai.kilocode.rpc.KiloAppRpcApi import ai.kilocode.rpc.dto.TelemetryCaptureDto @@ -31,6 +32,11 @@ class KiloTelemetryService internal constructor( } fun send(event: String, properties: Map = emptyMap()) { + if (KiloEnvironment.sandbox()) { + val payload = KiloEnvironment.payload(LOG) + properties + LOG.info("telemetry capture sandbox: event=$event ${payload.entries.joinToString(" ") { "${it.key}=${it.value}" }}") + return + } cs.launch { try { val dto = TelemetryCaptureDto(event, properties) diff --git a/packages/kilo-jetbrains/shared/src/main/kotlin/ai/kilocode/log/KiloLog.kt b/packages/kilo-jetbrains/shared/src/main/kotlin/ai/kilocode/log/KiloLog.kt index 3e89376c35..3477a5adc2 100644 --- a/packages/kilo-jetbrains/shared/src/main/kotlin/ai/kilocode/log/KiloLog.kt +++ b/packages/kilo-jetbrains/shared/src/main/kotlin/ai/kilocode/log/KiloLog.kt @@ -24,9 +24,8 @@ import java.util.logging.LogRecord * which writes to the standard IDE log file. * * In sandbox mode (i.e. when running via `./gradlew runIde`, detected via the `idea.plugin.in.sandbox.mode` - * system property), or in RC plugin builds, output is additionally written to a `kilo-dev.log` file inside the - * IDE log directory. This makes it easy to tail frontend and backend logs side-by-side during development or - * RC validation without opening the IDE's own log viewer. + * system property), output is written only to a `kilo-dev.log` file inside the IDE log directory. RC plugin builds + * write to both IntelliJ's log and `kilo-dev.log`. * * Usage: * ```kotlin @@ -49,19 +48,17 @@ interface KiloLog { companion object { fun create(cls: Class<*>): KiloLog { + if (KiloEnvironment.sandbox()) return FileLog(cls) val intellij = IntellijLog(cls) - if (!fileEnabled()) return intellij + if (!runCatching { KiloPlugin.isRc() }.getOrDefault(false)) return intellij return CompositeLog(intellij, FileLog(cls)) } - - private fun fileEnabled(): Boolean { - if (System.getProperty("idea.plugin.in.sandbox.mode", "false").toBoolean()) return true - return runCatching { KiloPlugin.isRc() }.getOrDefault(false) - } } } object KiloEnvironment { + fun sandbox(): Boolean = System.getProperty("idea.plugin.in.sandbox.mode", "false").toBoolean() + fun payload(log: KiloLog? = null): Map = buildMap { put("platform", "jetbrains") put("client", "jetbrains")