Skip to content

Commit 1fdfc24

Browse files
author
sword
committed
fix(web): new session button fails on fresh start with no opened projects
On a fresh `opencode web` start, the "New Session" button in the titlebar silently does nothing and the home page hides its "New Session" buttons. This happens because: 1. `newSessionProject()` in home.tsx relies solely on `projects()` (persisted opened projects), which is empty. 2. `openNewTab()` in titlebar.tsx has a 5-case fallback chain that all fail when no projects are persisted: home selection is empty, layout.projects.list() is empty, and global.ensureServerCtx(conn).projects.list() returns only persisted projects — never server-registered ones. Fix: - home.tsx: add sync data fallback to `newSessionProject` (registered projects from the server API) - titlebar.tsx: add a final fallback that reads server-registered projects from sync.data.project when all other cases fail
1 parent 45cd8d7 commit 1fdfc24

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

packages/app/src/components/titlebar.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,9 +367,21 @@ export function Titlebar(props: { update?: TitlebarUpdate }) {
367367
const project = global.ensureServerCtx(conn).projects.list()[0]
368368
return project ? [{ server: ServerConnection.key(conn), project }] : []
369369
})[0]
370-
if (!fallback) return
370+
if (fallback) {
371+
tabs.newDraft({ server: fallback.server, directory: fallback.project.worktree }, "")
372+
return
373+
}
371374

372-
tabs.newDraft({ server: fallback.server, directory: fallback.project.worktree }, "")
375+
// Last resort: use server-registered projects from sync data when
376+
// no projects have been opened yet (fresh web start)
377+
const conn = global.servers.list()[0] ?? server.current
378+
if (conn) {
379+
const ctx = global.ensureServerCtx(conn)
380+
const registered = ctx.sync.data.project[0]
381+
if (registered) {
382+
tabs.newDraft({ server: ServerConnection.key(conn), directory: registered.worktree }, "")
383+
}
384+
}
373385
}
374386
const toggleHome = () => tabs.toggleHome({ home: layout.route().type === "home", current: currentTab() })
375387

packages/app/src/pages/home.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,8 @@ export function NewHome() {
332332
() =>
333333
selectedProject() ??
334334
projects().find((project) => project.worktree === focusedServerCtx()?.projects.last()) ??
335-
projects()[0],
335+
projects()[0] ??
336+
focusedSync().data.project[0] as LocalProject | undefined,
336337
)
337338
const directories = (project: LocalProject) => [project.worktree, ...(project.sandboxes ?? [])]
338339
const projectDirectories = createMemo(() => {

0 commit comments

Comments
 (0)