app.tsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import "@/index.css"
  2. import { Show } from "solid-js"
  3. import { Router, Route, Navigate } from "@solidjs/router"
  4. import { MetaProvider } from "@solidjs/meta"
  5. import { Font } from "@opencode-ai/ui/font"
  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 } from "@/context/global-sync"
  10. import { LayoutProvider } from "@/context/layout"
  11. import { GlobalSDKProvider } from "@/context/global-sdk"
  12. import { TerminalProvider } from "@/context/terminal"
  13. import { PromptProvider } from "@/context/prompt"
  14. import { NotificationProvider } from "@/context/notification"
  15. import { DialogProvider } from "@opencode-ai/ui/context/dialog"
  16. import { CommandProvider } from "@/context/command"
  17. import Layout from "@/pages/layout"
  18. import Home from "@/pages/home"
  19. import DirectoryLayout from "@/pages/directory-layout"
  20. import Session from "@/pages/session"
  21. declare global {
  22. interface Window {
  23. __OPENCODE__?: { updaterEnabled?: boolean; port?: number }
  24. }
  25. }
  26. const host = import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "127.0.0.1"
  27. const port = window.__OPENCODE__?.port ?? import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"
  28. const url =
  29. new URLSearchParams(document.location.search).get("url") ||
  30. (location.hostname.includes("opencode.ai") || location.hostname.includes("localhost")
  31. ? `http://${host}:${port}`
  32. : "/")
  33. export function App() {
  34. return (
  35. <MarkedProvider>
  36. <DiffComponentProvider component={Diff}>
  37. <GlobalSDKProvider url={url}>
  38. <GlobalSyncProvider>
  39. <LayoutProvider>
  40. <DialogProvider>
  41. <CommandProvider>
  42. <NotificationProvider>
  43. <MetaProvider>
  44. <Font />
  45. <Router root={Layout}>
  46. <Route path="/" component={Home} />
  47. <Route path="/:dir" component={DirectoryLayout}>
  48. <Route path="/" component={() => <Navigate href="session" />} />
  49. <Route
  50. path="/session/:id?"
  51. component={(p) => (
  52. <Show when={p.params.id || true} keyed>
  53. <TerminalProvider>
  54. <PromptProvider>
  55. <Session />
  56. </PromptProvider>
  57. </TerminalProvider>
  58. </Show>
  59. )}
  60. />
  61. </Route>
  62. </Router>
  63. </MetaProvider>
  64. </NotificationProvider>
  65. </CommandProvider>
  66. </DialogProvider>
  67. </LayoutProvider>
  68. </GlobalSyncProvider>
  69. </GlobalSDKProvider>
  70. </DiffComponentProvider>
  71. </MarkedProvider>
  72. )
  73. }