fix(tui): clear onboarding after provider connect (#34819)

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
This commit is contained in:
opencode-agent[bot] 2026-07-01 21:10:24 -05:00 committed by GitHub
commit 02f012f5d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 12 deletions

View file

@ -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() ?? []))
}

View file

@ -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 <View api={api} hidden={hidden()} show={show()} connected={connected()} />
},

View file

@ -0,0 +1,5 @@
import type { IntegrationInfo } from "@opencode-ai/sdk/v2"
export function hasConnectedProvider(integrations: readonly Pick<IntegrationInfo, "connections">[]) {
return integrations.some((integration) => integration.connections.length > 0)
}

View file

@ -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)
})
})