summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-27 20:26:57 -0500
committerGitHub <[email protected]>2026-03-28 01:26:57 +0000
commitf736116967f5b57d89978e51961f2e78eedb443b (patch)
treeeac11218e8114d8d0f14c1b133b2c0594721f11c /packages/app/src/pages
parent82fc493520925cb71323964bff6939e768e6d83a (diff)
downloadopencode-f736116967f5b57d89978e51961f2e78eedb443b.tar.gz
opencode-f736116967f5b57d89978e51961f2e78eedb443b.zip
fix(app): more startup efficiency (#19454)
Diffstat (limited to 'packages/app/src/pages')
-rw-r--r--packages/app/src/pages/session.tsx41
1 files changed, 39 insertions, 2 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index 11e6375b3..917de35b1 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -544,6 +544,8 @@ export default function Page() {
let reviewFrame: number | undefined
let refreshFrame: number | undefined
let refreshTimer: number | undefined
+ let todoFrame: number | undefined
+ let todoTimer: number | undefined
let diffFrame: number | undefined
let diffTimer: number | undefined
@@ -718,7 +720,6 @@ export default function Page() {
if (!info) return true
return Date.now() - info.at > SESSION_PREFETCH_TTL
})()
- const todos = untrack(() => sync.data.todo[id] !== undefined || globalSync.data.session_todo[id] !== undefined)
untrack(() => {
void sync.session.sync(id)
})
@@ -730,7 +731,6 @@ export default function Page() {
if (params.id !== id) return
untrack(() => {
if (stale) void sync.session.sync(id, { force: true })
- void sync.session.todo(id, todos ? { force: true } : undefined)
})
}, 0)
})
@@ -739,6 +739,41 @@ export default function Page() {
createEffect(
on(
+ () => {
+ const id = params.id
+ return [
+ sdk.directory,
+ id,
+ id ? (sync.data.session_status[id]?.type ?? "idle") : "idle",
+ id ? composer.blocked() : false,
+ ] as const
+ },
+ ([dir, id, status, blocked]) => {
+ if (todoFrame !== undefined) cancelAnimationFrame(todoFrame)
+ if (todoTimer !== undefined) window.clearTimeout(todoTimer)
+ todoFrame = undefined
+ todoTimer = undefined
+ if (!id) return
+ if (status === "idle" && !blocked) return
+ const cached = untrack(() => sync.data.todo[id] !== undefined || globalSync.data.session_todo[id] !== undefined)
+
+ todoFrame = requestAnimationFrame(() => {
+ todoFrame = undefined
+ todoTimer = window.setTimeout(() => {
+ todoTimer = undefined
+ if (sdk.directory !== dir || params.id !== id) return
+ untrack(() => {
+ void sync.session.todo(id, cached ? { force: true } : undefined)
+ })
+ }, 0)
+ })
+ },
+ { defer: true },
+ ),
+ )
+
+ createEffect(
+ on(
() => visibleUserMessages().at(-1)?.id,
(lastId, prevLastId) => {
if (lastId && prevLastId && lastId > prevLastId) {
@@ -1658,6 +1693,8 @@ export default function Page() {
if (reviewFrame !== undefined) cancelAnimationFrame(reviewFrame)
if (refreshFrame !== undefined) cancelAnimationFrame(refreshFrame)
if (refreshTimer !== undefined) window.clearTimeout(refreshTimer)
+ if (todoFrame !== undefined) cancelAnimationFrame(todoFrame)
+ if (todoTimer !== undefined) window.clearTimeout(todoTimer)
if (diffFrame !== undefined) cancelAnimationFrame(diffFrame)
if (diffTimer !== undefined) window.clearTimeout(diffTimer)
if (scrollStateFrame !== undefined) cancelAnimationFrame(scrollStateFrame)