From 4be714dbf9c497ad27ef3376be534cd97ab6f065 Mon Sep 17 00:00:00 2001 From: Alex Alecu Date: Thu, 19 Mar 2026 16:20:06 +0200 Subject: [PATCH] fix(cli): exclude anonymous kilo provider from connected check The kilo provider always autoloads with free models and apiKey="anonymous", causing useConnected() to return true even for first-time users without any API key. This prevented the onboarding tip from ever appearing. --- packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx | 5 ++++- packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx index 32ff7bc510a..5aba1eb096f 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx @@ -10,8 +10,11 @@ import * as fuzzysort from "fuzzysort" export function useConnected() { const sync = useSync() + // kilocode_change - exclude "kilo" (anonymous autoload) alongside "opencode" return createMemo(() => - sync.data.provider.some((x) => x.id !== "opencode" || Object.values(x.models).some((y) => y.cost?.input !== 0)), + sync.data.provider.some( + (x) => (x.id !== "opencode" && x.id !== "kilo") || Object.values(x.models).some((y) => y.cost?.input !== 0), + ), ) } diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx index 5c5f87b078d..45824208bfe 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -64,7 +64,10 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { const kv = useKV() const hasProviders = createMemo(() => - sync.data.provider.some((x) => x.id !== "opencode" || Object.values(x.models).some((y) => y.cost?.input !== 0)), + // kilocode_change - exclude "kilo" (anonymous autoload) alongside "opencode" + sync.data.provider.some( + (x) => (x.id !== "opencode" && x.id !== "kilo") || Object.values(x.models).some((y) => y.cost?.input !== 0), + ), ) const gettingStartedDismissed = createMemo(() => kv.get("dismissed_getting_started", false))