summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-24 13:23:41 -0500
committerGitHub <[email protected]>2026-03-24 13:23:41 -0500
commit98b3340ceeb6928d0d57898d02665d763ef1ea9c (patch)
tree8c775bf02b6ba61c86ca8fca96067bfaf0cd42f6 /packages/app/src/pages
parent5e684c6e80d30a77ba02db013c61b8ecfe420f7f (diff)
downloadopencode-98b3340ceeb6928d0d57898d02665d763ef1ea9c.tar.gz
opencode-98b3340ceeb6928d0d57898d02665d763ef1ea9c.zip
fix(app): more startup efficiency (#18985)
Diffstat (limited to 'packages/app/src/pages')
-rw-r--r--packages/app/src/pages/home.tsx8
-rw-r--r--packages/app/src/pages/session.tsx7
-rw-r--r--packages/app/src/pages/session/use-session-hash-scroll.ts18
3 files changed, 30 insertions, 3 deletions
diff --git a/packages/app/src/pages/home.tsx b/packages/app/src/pages/home.tsx
index ba3a2b942..4c795b968 100644
--- a/packages/app/src/pages/home.tsx
+++ b/packages/app/src/pages/home.tsx
@@ -113,6 +113,14 @@ export default function Home() {
</ul>
</div>
</Match>
+ <Match when={!sync.ready}>
+ <div class="mt-30 mx-auto flex flex-col items-center gap-3">
+ <div class="text-12-regular text-text-weak">{language.t("common.loading")}</div>
+ <Button class="px-3" onClick={chooseProject}>
+ {language.t("command.project.open")}
+ </Button>
+ </div>
+ </Match>
<Match when={true}>
<div class="mt-30 mx-auto flex flex-col items-center gap-3">
<Icon name="folder-add-left" size="large" />
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index 19dcba58e..722a688bb 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -1179,8 +1179,6 @@ export default function Page() {
on(
() => sdk.directory,
() => {
- void file.tree.list("")
-
const tab = activeFileTab()
if (!tab) return
const path = file.pathFromTab(tab)
@@ -1635,6 +1633,9 @@ export default function Page() {
sessionID: () => params.id,
messagesReady,
visibleUserMessages,
+ historyMore,
+ historyLoading,
+ loadMore: (sessionID) => sync.session.history.loadMore(sessionID),
turnStart: historyWindow.turnStart,
currentMessageId: () => store.messageId,
pendingMessage: () => ui.pendingMessage,
@@ -1706,7 +1707,7 @@ export default function Page() {
<div class="flex-1 min-h-0 overflow-hidden">
<Switch>
<Match when={params.id}>
- <Show when={lastUserMessage()}>
+ <Show when={messagesReady()}>
<MessageTimeline
mobileChanges={mobileChanges()}
mobileFallback={reviewContent({
diff --git a/packages/app/src/pages/session/use-session-hash-scroll.ts b/packages/app/src/pages/session/use-session-hash-scroll.ts
index 5fadb1f22..c582749d1 100644
--- a/packages/app/src/pages/session/use-session-hash-scroll.ts
+++ b/packages/app/src/pages/session/use-session-hash-scroll.ts
@@ -8,6 +8,9 @@ export const useSessionHashScroll = (input: {
sessionID: () => string | undefined
messagesReady: () => boolean
visibleUserMessages: () => UserMessage[]
+ historyMore: () => boolean
+ historyLoading: () => boolean
+ loadMore: (sessionID: string) => Promise<void>
turnStart: () => number
currentMessageId: () => string | undefined
pendingMessage: () => string | undefined
@@ -181,6 +184,21 @@ export const useSessionHashScroll = (input: {
queue(() => scrollToMessage(msg, "auto"))
})
+ createEffect(() => {
+ const sessionID = input.sessionID()
+ if (!sessionID || !input.messagesReady()) return
+
+ visibleUserMessages()
+
+ let targetId = input.pendingMessage()
+ if (!targetId && !clearing) targetId = messageIdFromHash(location.hash)
+ if (!targetId) return
+ if (messageById().has(targetId)) return
+ if (!input.historyMore() || input.historyLoading()) return
+
+ void input.loadMore(sessionID)
+ })
+
onMount(() => {
if (typeof window !== "undefined" && "scrollRestoration" in window.history) {
window.history.scrollRestoration = "manual"