Dax Raad 9 months ago
parent
commit
a9758e0db5
3 changed files with 26 additions and 27 deletions
  1. 20 25
      app/packages/web/src/components/Share.tsx
  2. 3 1
      js/src/index.ts
  3. 3 1
      js/src/share/share.ts

+ 20 - 25
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)
         }

+ 3 - 1
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) => {

+ 3 - 1
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",