desktop v2 migration finalising (#36912)

This commit is contained in:
Brendan Allan 2026-07-15 03:56:47 +08:00 committed by GitHub
commit 4a181c3574
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 155 additions and 46 deletions

View file

@ -7,7 +7,7 @@ import { FIRST_LAUNCH_ONBOARDING_COMPLETE_KEY, OLD_LAYOUT_ELIGIBLE_KEY } from ".
import { write as writeLog } from "./logging"
import { hasExistingAppState } from "./install-state"
const DEFAULT_PROJECT_DIR = "New OpenCode Project"
const DEFAULT_PROJECT_DIR = "Default Project"
export function initializeOldLayoutEligibility(userDataPath: string) {
const entries = existsSync(userDataPath) ? readdirSync(userDataPath, { withFileTypes: true }) : []

View file

@ -36,6 +36,7 @@ protocol.registerSchemesAsPrivileged([
secure: true,
standard: true,
supportFetchAPI: true,
stream: true,
},
},
])
@ -266,7 +267,10 @@ export function registerRendererProtocol() {
}
try {
const response = await net.fetch(pathToFileURL(file).toString())
const range = request.headers.get("range")
const response = await net.fetch(pathToFileURL(file).toString(), {
headers: range ? { range } : undefined,
})
if (response.status >= 400) {
writeLog(
"protocol",

View file

@ -1,22 +1,14 @@
import {
ServerConnection,
useLayout,
useProviders,
useServer,
useServerSDK,
useServerSync,
useSettings,
useTabs,
} from "@opencode-ai/app"
import { onMount, startTransition } from "solid-js"
import { onMount } from "solid-js"
export function DesktopFirstLaunchOnboarding(props: { initialUrl: string; onLoaded: () => void }) {
const server = useServer()
const serverSDK = useServerSDK()
const serverSync = useServerSync()
const settings = useSettings()
const layout = useLayout()
const providers = useProviders()
const tabs = useTabs()
onMount(() => {
@ -26,40 +18,26 @@ export function DesktopFirstLaunchOnboarding(props: { initialUrl: string; onLoad
async function runFirstLaunchOnboarding() {
try {
await Promise.all(
[server.ready.promise, layout.ready.promise, tabs.ready.promise, tabs.recentReady.promise].map(
(p) => p ?? Promise.resolve(),
),
[server.ready.promise, tabs.ready.promise, tabs.recentReady.promise].map((p) => p ?? Promise.resolve()),
)
settings.general.setOldLayoutEligible(await window.api.isOldLayoutEligible())
const existingInstall = await window.api.isOldLayoutEligible()
settings.general.setOldLayoutEligible(existingInstall)
if (!server.isLocal()) return
const pending = await window.api.isFirstLaunchOnboardingPending()
if (!pending) return
const sessions = await serverSDK()
.client.session.list()
.then((x) => x.data ?? [])
.catch(() => undefined)
const connectedProviders = providers.connected()
const paidProviders = providers.paid()
const persistedProjects = layout.projects.list()
const shouldTrigger =
!existingInstall &&
props.initialUrl === "/" &&
sessions?.length === 0 &&
paidProviders.length === 0 &&
persistedProjects.length === 0 &&
tabs.store.length === 0 &&
server.list.every(ServerConnection.builtin)
console.info("[desktop-onboarding] first launch onboarding evaluated", {
pending,
shouldTrigger,
existingInstall,
initialUrl: props.initialUrl,
sessions: sessions?.length,
connectedProviders: connectedProviders.length,
paidProviders: paidProviders.length,
serverProjects: serverSync().data.project.length,
persistedProjects: persistedProjects.length,
tabs: tabs.store.length,
servers: server.list.map(ServerConnection.key),
})
@ -70,9 +48,7 @@ export function DesktopFirstLaunchOnboarding(props: { initialUrl: string; onLoad
console.info("[desktop-onboarding] starting first launch draft", { directory })
server.projects.open(directory)
server.projects.touch(directory)
await startTransition(() => {
tabs.newDraft({ server: server.key, directory })
})
tabs.select(await tabs.newDraft({ server: server.key, directory }))
} catch (error) {
console.error("[desktop-onboarding] first launch onboarding failed", error)
}