Files
neuron/packages/desktop/src/renderer/onboarding.tsx
T
opencode-agent[bot] 75cf4cc8a8 chore: generate
2026-07-14 19:58:26 +00:00

54 lines
1.8 KiB
TypeScript

import { ServerConnection, useServer, useSettings, useTabs } from "@opencode-ai/app"
import { onMount } from "solid-js"
export function DesktopFirstLaunchOnboarding(props: { initialUrl: string; onLoaded: () => void }) {
const server = useServer()
const settings = useSettings()
const tabs = useTabs()
onMount(() => {
void runFirstLaunchOnboarding().finally(props.onLoaded)
})
async function runFirstLaunchOnboarding() {
try {
await Promise.all(
[server.ready.promise, tabs.ready.promise, tabs.recentReady.promise].map((p) => p ?? Promise.resolve()),
)
const existingInstall = await window.api.isOldLayoutEligible()
settings.general.setOldLayoutEligible(existingInstall)
if (!server.isLocal()) return
const pending = await window.api.isFirstLaunchOnboardingPending()
if (!pending) return
const shouldTrigger =
!existingInstall &&
props.initialUrl === "/" &&
tabs.store.length === 0 &&
server.list.every(ServerConnection.builtin)
console.info("[desktop-onboarding] first launch onboarding evaluated", {
pending,
shouldTrigger,
existingInstall,
initialUrl: props.initialUrl,
tabs: tabs.store.length,
servers: server.list.map(ServerConnection.key),
})
const directory = await window.api.finishFirstLaunchOnboarding(shouldTrigger)
if (!shouldTrigger || !directory) return
console.info("[desktop-onboarding] starting first launch draft", { directory })
server.projects.open(directory)
server.projects.touch(directory)
tabs.select(await tabs.newDraft({ server: server.key, directory }))
} catch (error) {
console.error("[desktop-onboarding] first launch onboarding failed", error)
}
}
return null
}