summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/sdk.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-10-23 15:27:31 -0500
committerAdam <[email protected]>2025-10-24 12:16:32 -0500
commit3eb2db98ed0a9c266e1bf00544e460cb0633b368 (patch)
treeeb04fea563b3a3b74a3d89ca9500e92cf4b908c8 /packages/desktop/src/context/sdk.tsx
parent35dec0649db8f46bffd7121af9cd301668e69e8c (diff)
downloadopencode-3eb2db98ed0a9c266e1bf00544e460cb0633b368.tar.gz
opencode-3eb2db98ed0a9c266e1bf00544e460cb0633b368.zip
wip: desktop work
Diffstat (limited to 'packages/desktop/src/context/sdk.tsx')
-rw-r--r--packages/desktop/src/context/sdk.tsx56
1 files changed, 32 insertions, 24 deletions
diff --git a/packages/desktop/src/context/sdk.tsx b/packages/desktop/src/context/sdk.tsx
index 48595cf9d..7ffa30494 100644
--- a/packages/desktop/src/context/sdk.tsx
+++ b/packages/desktop/src/context/sdk.tsx
@@ -1,29 +1,37 @@
-import { createContext, useContext, type ParentProps } from "solid-js"
-import { createOpencodeClient } from "@opencode-ai/sdk/client"
+import { createOpencodeClient, type Event } from "@opencode-ai/sdk/client"
+import { createSimpleContext } from "./helper"
+import { createGlobalEmitter } from "@solid-primitives/event-bus"
+import { onCleanup } from "solid-js"
-const host = import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "127.0.0.1"
-const port = import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"
+export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
+ name: "SDK",
+ init: (props: { url: string }) => {
+ const abort = new AbortController()
+ const sdk = createOpencodeClient({
+ baseUrl: props.url,
+ signal: abort.signal,
+ fetch: (req) => {
+ // @ts-ignore
+ req.timeout = false
+ return fetch(req)
+ },
+ })
-function init() {
- const client = createOpencodeClient({
- baseUrl: `http://${host}:${port}`,
- })
- return client
-}
+ const emitter = createGlobalEmitter<{
+ [key in Event["type"]]: Extract<Event, { type: key }>
+ }>()
-type SDKContext = ReturnType<typeof init>
+ sdk.event.subscribe().then(async (events) => {
+ for await (const event of events.stream) {
+ console.log("event", event.type)
+ emitter.emit(event.type, event)
+ }
+ })
-const ctx = createContext<SDKContext>()
+ onCleanup(() => {
+ abort.abort()
+ })
-export function SDKProvider(props: ParentProps) {
- const value = init()
- return <ctx.Provider value={value}>{props.children}</ctx.Provider>
-}
-
-export function useSDK() {
- const value = useContext(ctx)
- if (!value) {
- throw new Error("useSDK must be used within a SDKProvider")
- }
- return value
-}
+ return { client: sdk, event: emitter }
+ },
+})