Revert "fix(app): use legacy SDK for global events"

This reverts commit e22ede26ee.
This commit is contained in:
LukeParkerDev
2026-05-15 11:36:00 +10:00
parent e22ede26ee
commit e8355b45bf
2 changed files with 12 additions and 29 deletions

View File

@@ -1,14 +1,9 @@
import {
createOpencodeClient as createEventClient,
type Event as LegacyEvent,
type GlobalEvent as LegacyGlobalEvent,
} from "@opencode-ai/sdk/client"
import type { Event as CurrentEvent, GlobalEvent as CurrentGlobalEvent } from "@opencode-ai/sdk/v2/client"
import type { Event } from "@opencode-ai/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { makeEventListener } from "@solid-primitives/event-listener"
import { batch, onCleanup, onMount } from "solid-js"
import { authTokenFromCredentials, createSdkForServer } from "@/utils/server"
import { createSdkForServer } from "@/utils/server"
import { useLanguage } from "./language"
import { usePlatform } from "./platform"
import { useServer } from "./server"
@@ -16,9 +11,6 @@ import { useServer } from "./server"
const isAbortError = (error: unknown) =>
error !== null && typeof error === "object" && "name" in error && error.name === "AbortError"
export type GlobalSDKEvent = CurrentEvent | LegacyEvent
type StreamEvent = CurrentGlobalEvent | LegacyGlobalEvent
export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleContext({
name: "GlobalSDK",
init: () => {
@@ -41,25 +33,16 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
const currentServer = server.current
if (!currentServer) throw new Error(language.t("error.globalSDK.noServerAvailable"))
// Keep /global/event on the legacy SDK until the EventV2 stream contract is stable.
const eventSdk = createEventClient({
const eventSdk = createSdkForServer({
signal: abort.signal,
fetch: eventFetch,
baseUrl: currentServer.http.url,
headers: currentServer.http.password
? {
Authorization: `Basic ${authTokenFromCredentials({
username: currentServer.http.username,
password: currentServer.http.password,
})}`,
}
: undefined,
server: currentServer.http,
})
const emitter = createGlobalEmitter<{
[key: string]: GlobalSDKEvent
[key: string]: Event
}>()
type Queued = { directory: string; payload: GlobalSDKEvent }
type Queued = { directory: string; payload: Event }
const FLUSH_FRAME_MS = 16
const STREAM_YIELD_MS = 8
const RECONNECT_DELAY_MS = 250
@@ -73,7 +56,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
const deltaKey = (directory: string, messageID: string, partID: string) => `${directory}:${messageID}:${partID}`
const key = (directory: string, payload: GlobalSDKEvent) => {
const key = (directory: string, payload: Event) => {
if (payload.type === "session.status") return `session.status:${directory}:${payload.properties.sessionID}`
if (payload.type === "lsp.updated") return `lsp.updated:${directory}`
if (payload.type === "message.part.updated") {
@@ -167,8 +150,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
})
let yielded = Date.now()
resetHeartbeat()
const stream: AsyncIterable<StreamEvent> = events.stream
for await (const event of stream) {
for await (const event of events.stream) {
resetHeartbeat()
streamErrorLogged = false
const directory = event.directory ?? "global"
@@ -176,7 +158,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
continue
}
const payload = event.payload
const payload = event.payload as Event
const k = key(directory, payload)
if (k) {

View File

@@ -1,10 +1,11 @@
import type { Event } from "@opencode-ai/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { type Accessor, createEffect, createMemo, onCleanup } from "solid-js"
import { type GlobalSDKEvent, useGlobalSDK } from "./global-sdk"
import { useGlobalSDK } from "./global-sdk"
type SDKEventMap = {
[key in GlobalSDKEvent["type"]]: Extract<GlobalSDKEvent, { type: key }>
[key in Event["type"]]: Extract<Event, { type: key }>
}
export const { use: useSDK, provider: SDKProvider } = createSimpleContext({