From b7262b85273dfb2d4cb4f60034aa482e25613e65 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 5 Nov 2025 15:33:23 -0500 Subject: [PATCH] performance improvements --- packages/opencode/src/cli/cmd/tui/app.tsx | 22 ++----------------- .../opencode/src/cli/cmd/tui/context/sync.tsx | 17 ++++++++++++-- .../src/cli/cmd/tui/routes/session/index.tsx | 10 ++++++++- packages/opencode/src/format/index.ts | 1 + packages/opencode/src/session/prompt.ts | 3 --- 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 1fba51cb..1c309e89 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -7,7 +7,7 @@ import { Installation } from "@/installation" import { Global } from "@/global" import { DialogProvider, useDialog } from "@tui/ui/dialog" import { SDKProvider, useSDK } from "@tui/context/sdk" -import { SyncProvider, useSync } from "@tui/context/sync" +import { SyncProvider } from "@tui/context/sync" import { LocalProvider, useLocal } from "@tui/context/local" import { DialogModel } from "@tui/component/dialog-model" import { DialogStatus } from "@tui/component/dialog-status" @@ -24,7 +24,6 @@ import { PromptHistoryProvider } from "./component/prompt/history" import { DialogAlert } from "./ui/dialog-alert" import { ToastProvider, useToast } from "./ui/toast" import { ExitProvider, useExit } from "./context/exit" -import type { SessionRoute } from "./context/route" import { Session as SessionApi } from "@/session" import { TuiEvent } from "./event" import { KVProvider, useKV } from "./context/kv" @@ -173,9 +172,7 @@ function App() { const kv = useKV() const command = useCommandDialog() const { event } = useSDK() - const sync = useSync() const toast = useToast() - const [sessionExists, setSessionExists] = createSignal(false) const { theme, mode, setMode } = useTheme() const exit = useExit() @@ -192,21 +189,6 @@ function App() { } }) - // Make sure session is valid, otherwise redirect to home - createEffect(async () => { - if (route.data.type === "session") { - const data = route.data as SessionRoute - await sync.session.sync(data.sessionID).catch(() => { - toast.show({ - message: `Session not found: ${data.sessionID}`, - variant: "error", - }) - return route.navigate({ type: "home" }) - }) - setSessionExists(true) - } - }) - createEffect(() => { console.log(JSON.stringify(route.data)) }) @@ -413,7 +395,7 @@ function App() { - + diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index b0c2ea86..4b6b0aff 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -137,7 +137,12 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ } const result = Binary.search(messages, event.properties.info.id, (m) => m.id) if (result.found) { - setStore("message", event.properties.info.sessionID, result.index, reconcile(event.properties.info)) + setStore( + "message", + event.properties.info.sessionID, + result.index, + reconcile(event.properties.info), + ) break } setStore( @@ -171,7 +176,12 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ } const result = Binary.search(parts, event.properties.part.id, (p) => p.id) if (result.found) { - setStore("part", event.properties.part.messageID, result.index, reconcile(event.properties.part)) + setStore( + "part", + event.properties.part.messageID, + result.index, + reconcile(event.properties.part), + ) break } setStore( @@ -249,11 +259,13 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ return last.time.completed ? "idle" : "working" }, async sync(sessionID: string) { + const now = Date.now() const [session, messages, todo] = await Promise.all([ sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }), sdk.client.session.messages({ path: { id: sessionID } }), sdk.client.session.todo({ path: { id: sessionID } }), ]) + console.log("fetched in " + (Date.now() - now), sessionID) setStore( produce((draft) => { const match = Binary.search(draft.session, sessionID, (s) => s.id) @@ -266,6 +278,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ } }), ) + console.log("synced in " + (Date.now() - now), sessionID) }, }, } diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 9fa844b7..0adde4c8 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -104,7 +104,15 @@ export function Session() { const sidebarVisible = createMemo(() => sidebar() === "show" || (sidebar() === "auto" && wide())) const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4) - createEffect(() => sync.session.sync(route.sessionID)) + createEffect(() => { + sync.session.sync(route.sessionID).catch(() => { + toast.show({ + message: `Session not found: ${route.sessionID}`, + variant: "error", + }) + return navigate({ type: "home" }) + }) + }) const toast = useToast() diff --git a/packages/opencode/src/format/index.ts b/packages/opencode/src/format/index.ts index e307496c..ebcc7909 100644 --- a/packages/opencode/src/format/index.ts +++ b/packages/opencode/src/format/index.ts @@ -91,6 +91,7 @@ export namespace Format { export function init() { log.info("init") + return Bus.subscribe(File.Event.Edited, async (payload) => { const file = payload.properties.file log.info("formatting", { file }) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index ea43fa26..a7004534 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1022,9 +1022,6 @@ export namespace SessionPrompt { for await (const value of stream.fullStream) { input.abort.throwIfAborted() - log.info("part", { - type: value.type, - }) switch (value.type) { case "start": break