diff options
| author | Dax Raad <[email protected]> | 2025-05-27 15:26:49 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-05-27 15:26:49 -0400 |
| commit | a9758e0db58b1043319adec319f033a31b2febc5 (patch) | |
| tree | e37159d8f6473067b67bb709b9c49102259f839f | |
| parent | e98f915fd512e5319079d7b0826ecd44f2d6e463 (diff) | |
| download | opencode-a9758e0db58b1043319adec319f033a31b2febc5.tar.gz opencode-a9758e0db58b1043319adec319f033a31b2febc5.zip | |
vomit
| -rw-r--r-- | app/packages/web/src/components/Share.tsx | 45 | ||||
| -rw-r--r-- | js/src/index.ts | 4 | ||||
| -rw-r--r-- | js/src/share/share.ts | 4 |
3 files changed, 26 insertions, 27 deletions
diff --git a/app/packages/web/src/components/Share.tsx b/app/packages/web/src/components/Share.tsx index c355fa20a..6c0b857c4 100644 --- a/app/packages/web/src/components/Share.tsx +++ b/app/packages/web/src/components/Share.tsx @@ -1,14 +1,25 @@ import { createSignal, onCleanup, onMount, Show, For, createMemo } from "solid-js" import styles from "./share.module.css" import { type UIMessage } from "ai" -import { createStore } from "solid-js/store" +import { createStore, reconcile } from "solid-js/store" type Status = "disconnected" | "connecting" | "connected" | "error" | "reconnecting" -type Message = { - key: string - content: any -} + +type SessionMessage = UIMessage<{ + time: { + created: number; + completed?: number; + }; + sessionID: string; + tool: Record<string, { + properties: Record<string, any>; + time: { + start: number; + end: number; + }; + }>; +}> type SessionInfo = { tokens?: { @@ -35,20 +46,7 @@ export default function Share(props: { api: string }) { const [store, setStore] = createStore<{ info?: SessionInfo - messages: Record<string, UIMessage<{ - time: { - created: number; - completed?: number; - }; - sessionID: string; - tool: Record<string, { - properties: Record<string, any>; - time: { - start: number; - end: number; - }; - }>; - }>> + messages: Record<string, SessionMessage> }>({ messages: {}, }) @@ -103,20 +101,17 @@ export default function Share(props: { api: string }) { socket.onmessage = (event) => { console.log("WebSocket message received") try { - const data = JSON.parse(event.data) as Message + const data = JSON.parse(event.data) const [root, type, ...splits] = data.key.split("/") if (root !== "session") return - if (type === "info") { - setStore("info", data.content) + setStore("info", reconcile(data.content)) return } - if (type === "message") { const [, messageID] = splits - setStore("messages", messageID, data.content) + setStore("messages", messageID, reconcile(data.content)) } - } catch (error) { console.error("Error parsing WebSocket message:", error) } diff --git a/js/src/index.ts b/js/src/index.ts index 7d6feed45..dc80206f7 100644 --- a/js/src/index.ts +++ b/js/src/index.ts @@ -41,7 +41,9 @@ cli const session = await Session.create(); const shareID = await Session.share(session.id); if (shareID) - console.log("Share ID: https://dev.opencode.ai/share?id=" + session.id); + console.log( + `Share ID: ${Share.URL.replace("api.", "")}/share?id=${session.id}`, + ); let index = 0; Bus.subscribe(Storage.Event.Write, async (payload) => { diff --git a/js/src/share/share.ts b/js/src/share/share.ts index f8e25e07d..b857cac59 100644 --- a/js/src/share/share.ts +++ b/js/src/share/share.ts @@ -52,7 +52,9 @@ export namespace Share { await state(); } - const URL = process.env["OPENCODE_API"] ?? "https://api.dev.opencode.ai"; + export const URL = + process.env["OPENCODE_API"] ?? "https://api.dev.opencode.ai"; + export async function create(sessionID: string) { return fetch(`${URL}/share_create`, { method: "POST", |
