diff --git a/packages/tui/src/component/use-connected.tsx b/packages/tui/src/component/use-connected.tsx
index 4a54ae68e1..4fdbe4a57c 100644
--- a/packages/tui/src/component/use-connected.tsx
+++ b/packages/tui/src/component/use-connected.tsx
@@ -1,13 +1,8 @@
import { createMemo } from "solid-js"
import { useData } from "../context/data"
-import { useSync } from "../context/sync"
+import { hasConnectedProvider } from "../util/connected-provider"
export function useConnected() {
const data = useData()
- const sync = useSync()
- return createMemo(
- () =>
- (data.location.integration.list() ?? []).some((integration) => integration.connections.length > 0) ||
- sync.data.console_state.consoleManagedProviders.length > 0,
- )
+ return createMemo(() => hasConnectedProvider(data.location.integration.list() ?? []))
}
diff --git a/packages/tui/src/feature-plugins/home/tips.tsx b/packages/tui/src/feature-plugins/home/tips.tsx
index 9a853c371d..7b67d4aac5 100644
--- a/packages/tui/src/feature-plugins/home/tips.tsx
+++ b/packages/tui/src/feature-plugins/home/tips.tsx
@@ -3,6 +3,8 @@ import type { BuiltinTuiPlugin } from "../builtins"
import { createMemo, Show } from "solid-js"
import { Tips } from "./tips-view"
import { useBindings } from "../../keymap"
+import { useData } from "../../context/data"
+import { hasConnectedProvider } from "../../util/connected-provider"
const id = "internal:home-tips"
@@ -37,13 +39,10 @@ const tui: TuiPlugin = async (api) => {
order: 100,
slots: {
home_bottom() {
+ const data = useData()
const hidden = createMemo(() => api.kv.get("tips_hidden", false))
const first = createMemo(() => api.state.session.count() === 0)
- const connected = createMemo(() =>
- api.state.provider.some(
- (item) => item.id !== "opencode" || Object.values(item.models).some((model) => model.cost?.input !== 0),
- ),
- )
+ const connected = createMemo(() => hasConnectedProvider(data.location.integration.list() ?? []))
const show = createMemo(() => (!first() || !connected()) && !hidden())
return
},
diff --git a/packages/tui/src/util/connected-provider.ts b/packages/tui/src/util/connected-provider.ts
new file mode 100644
index 0000000000..4ceacf6552
--- /dev/null
+++ b/packages/tui/src/util/connected-provider.ts
@@ -0,0 +1,5 @@
+import type { IntegrationInfo } from "@opencode-ai/sdk/v2"
+
+export function hasConnectedProvider(integrations: readonly Pick[]) {
+ return integrations.some((integration) => integration.connections.length > 0)
+}
diff --git a/packages/tui/test/util/connected-provider.test.ts b/packages/tui/test/util/connected-provider.test.ts
new file mode 100644
index 0000000000..b12d448b36
--- /dev/null
+++ b/packages/tui/test/util/connected-provider.test.ts
@@ -0,0 +1,14 @@
+import { describe, expect, test } from "bun:test"
+import { hasConnectedProvider } from "../../src/util/connected-provider"
+
+describe("hasConnectedProvider", () => {
+ test("is false without integration credentials", () => {
+ expect(hasConnectedProvider([])).toBe(false)
+ expect(hasConnectedProvider([{ connections: [] }])).toBe(false)
+ })
+
+ test("is true after any provider integration is connected", () => {
+ expect(hasConnectedProvider([{ connections: [{ type: "credential", id: "cred_1", label: "Work" }] }])).toBe(true)
+ expect(hasConnectedProvider([{ connections: [{ type: "env", name: "OPENAI_API_KEY" }] }])).toBe(true)
+ })
+})