Dax Raad 3 месяцев назад
Родитель
Сommit
b7262b8527

+ 2 - 20
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() {
           <Match when={route.data.type === "home"}>
             <Home />
           </Match>
-          <Match when={route.data.type === "session" && sessionExists()}>
+          <Match when={route.data.type === "session"}>
             <Session />
           </Match>
         </Switch>

+ 15 - 2
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)
         },
       },
     }

+ 9 - 1
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()
 

+ 1 - 0
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 })

+ 0 - 3
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