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