|
| 1 | +import "@/index.css" |
| 2 | +import { Router, Route, Navigate } from "@solidjs/router" |
| 3 | +import { MetaProvider } from "@solidjs/meta" |
| 4 | +import { Font } from "@opencode-ai/ui/font" |
| 5 | +import { Favicon } from "@opencode-ai/ui/favicon" |
| 6 | +import { MarkedProvider } from "@opencode-ai/ui/context/marked" |
| 7 | +import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" |
| 8 | +import { Diff } from "@opencode-ai/ui/diff" |
| 9 | +import { GlobalSyncProvider, useGlobalSync } from "./context/global-sync" |
| 10 | +import Layout from "@/pages/layout" |
| 11 | +import DirectoryLayout from "@/pages/directory-layout" |
| 12 | +import Session from "@/pages/session" |
| 13 | +import { LayoutProvider } from "./context/layout" |
| 14 | +import { GlobalSDKProvider } from "./context/global-sdk" |
| 15 | +import { SessionProvider } from "./context/session" |
| 16 | +import { base64Encode } from "./utils" |
| 17 | +import { createMemo, Show } from "solid-js" |
| 18 | + |
| 19 | +const host = import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "127.0.0.1" |
| 20 | +const port = import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096" |
| 21 | + |
| 22 | +const url = |
| 23 | + new URLSearchParams(document.location.search).get("url") || |
| 24 | + (location.hostname.includes("opencode.ai") || location.hostname.includes("localhost") |
| 25 | + ? `http://${host}:${port}` |
| 26 | + : "/") |
| 27 | + |
| 28 | +export function DesktopInterface() { |
| 29 | + return ( |
| 30 | + <MarkedProvider> |
| 31 | + <DiffComponentProvider component={Diff}> |
| 32 | + <GlobalSDKProvider url={url}> |
| 33 | + <GlobalSyncProvider> |
| 34 | + <LayoutProvider> |
| 35 | + <MetaProvider> |
| 36 | + <Font /> |
| 37 | + <Router root={Layout}> |
| 38 | + <Route |
| 39 | + path="/" |
| 40 | + component={() => { |
| 41 | + const globalSync = useGlobalSync() |
| 42 | + const slug = createMemo(() => base64Encode(globalSync.data.defaultProject!.worktree)) |
| 43 | + return <Navigate href={`${slug()}/session`} /> |
| 44 | + }} |
| 45 | + /> |
| 46 | + <Route path="/:dir" component={DirectoryLayout}> |
| 47 | + <Route path="/" component={() => <Navigate href="session" />} /> |
| 48 | + <Route |
| 49 | + path="/session/:id?" |
| 50 | + component={(p) => ( |
| 51 | + <Show when={p.params.id || true} keyed> |
| 52 | + <SessionProvider> |
| 53 | + <Session /> |
| 54 | + </SessionProvider> |
| 55 | + </Show> |
| 56 | + )} |
| 57 | + /> |
| 58 | + </Route> |
| 59 | + </Router> |
| 60 | + </MetaProvider> |
| 61 | + </LayoutProvider> |
| 62 | + </GlobalSyncProvider> |
| 63 | + </GlobalSDKProvider> |
| 64 | + </DiffComponentProvider> |
| 65 | + </MarkedProvider> |
| 66 | + ) |
| 67 | +} |
0 commit comments