summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-27 15:26:49 -0400
committerDax Raad <[email protected]>2025-05-27 15:26:49 -0400
commita9758e0db58b1043319adec319f033a31b2febc5 (patch)
treee37159d8f6473067b67bb709b9c49102259f839f
parente98f915fd512e5319079d7b0826ecd44f2d6e463 (diff)
downloadopencode-a9758e0db58b1043319adec319f033a31b2febc5.tar.gz
opencode-a9758e0db58b1043319adec319f033a31b2febc5.zip
vomit
-rw-r--r--app/packages/web/src/components/Share.tsx45
-rw-r--r--js/src/index.ts4
-rw-r--r--js/src/share/share.ts4
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",