summaryrefslogtreecommitdiffhomepage
path: root/packages/enterprise/src/routes
diff options
context:
space:
mode:
authorShoubhit Dash <[email protected]>2026-03-06 18:19:15 +0530
committerGitHub <[email protected]>2026-03-06 06:49:15 -0600
commit1d9dcd2a27736b83d20abc0111141fdd6bffde7e (patch)
tree70d40994ed50d7f068c1415a67d9d8782d78d9af /packages/enterprise/src/routes
parenteeeb21ff8638eddd960afbd8f522c87d850d6183 (diff)
downloadopencode-1d9dcd2a27736b83d20abc0111141fdd6bffde7e.tar.gz
opencode-1d9dcd2a27736b83d20abc0111141fdd6bffde7e.zip
share: speed up share loads (#16165)
Diffstat (limited to 'packages/enterprise/src/routes')
-rw-r--r--packages/enterprise/src/routes/api/[...path].ts1
-rw-r--r--packages/enterprise/src/routes/share/[shareID].tsx90
2 files changed, 14 insertions, 77 deletions
diff --git a/packages/enterprise/src/routes/api/[...path].ts b/packages/enterprise/src/routes/api/[...path].ts
index e77c00de9..f97788bd0 100644
--- a/packages/enterprise/src/routes/api/[...path].ts
+++ b/packages/enterprise/src/routes/api/[...path].ts
@@ -108,6 +108,7 @@ app
validator("param", z.object({ shareID: z.string() })),
async (c) => {
const { shareID } = c.req.valid("param")
+ c.header("Cache-Control", "public, max-age=30, s-maxage=300, stale-while-revalidate=86400")
return c.json(await Share.data(shareID))
},
)
diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx
index 007b4c268..e755ea75a 100644
--- a/packages/enterprise/src/routes/share/[shareID].tsx
+++ b/packages/enterprise/src/routes/share/[shareID].tsx
@@ -5,12 +5,11 @@ import { DataProvider } from "@opencode-ai/ui/context"
import { FileComponentProvider } from "@opencode-ai/ui/context/file"
import { WorkerPoolProvider } from "@opencode-ai/ui/context/worker-pool"
import { createAsync, query, useParams } from "@solidjs/router"
-import { createEffect, createMemo, ErrorBoundary, For, Match, Show, Switch } from "solid-js"
+import { createMemo, createSignal, ErrorBoundary, For, Match, Show, Switch } from "solid-js"
import { Share } from "~/core/share"
import { Logo, Mark } from "@opencode-ai/ui/logo"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
-import { createDefaultOptions } from "@opencode-ai/ui/pierre"
import { iife } from "@opencode-ai/util/iife"
import { Binary } from "@opencode-ai/util/binary"
import { NamedError } from "@opencode-ai/util/error"
@@ -20,11 +19,11 @@ import z from "zod"
import NotFound from "../[...404]"
import { Tabs } from "@opencode-ai/ui/tabs"
import { MessageNav } from "@opencode-ai/ui/message-nav"
-import { preloadMultiFileDiff, PreloadMultiFileDiffResult } from "@pierre/diffs/ssr"
import { FileSSR } from "@opencode-ai/ui/file-ssr"
import { clientOnly } from "@solidjs/start"
import { Meta, Title } from "@solidjs/meta"
import { Base64 } from "js-base64"
+import { getRequestEvent } from "solid-js/web"
const ClientOnlyWorkerPoolProvider = clientOnly(() =>
import("@opencode-ai/ui/pierre/worker").then((m) => ({
@@ -54,12 +53,6 @@ const getData = query(async (shareID) => {
session_diff: {
[sessionID: string]: FileDiff[]
}
- session_diff_preload: {
- [sessionID: string]: PreloadMultiFileDiffResult<any>[]
- }
- session_diff_preload_split: {
- [sessionID: string]: PreloadMultiFileDiffResult<any>[]
- }
session_status: {
[sessionID: string]: SessionStatus
}
@@ -79,12 +72,6 @@ const getData = query(async (shareID) => {
session_diff: {
[share.sessionID]: [],
},
- session_diff_preload: {
- [share.sessionID]: [],
- },
- session_diff_preload_split: {
- [share.sessionID]: [],
- },
session_status: {
[share.sessionID]: {
type: "idle",
@@ -101,28 +88,6 @@ const getData = query(async (shareID) => {
break
case "session_diff":
result.session_diff[share.sessionID] = item.data
- await Promise.all([
- Promise.all(
- item.data.map(async (diff) =>
- preloadMultiFileDiff<any>({
- oldFile: { name: diff.file, contents: diff.before },
- newFile: { name: diff.file, contents: diff.after },
- options: createDefaultOptions("unified"),
- // annotations,
- }),
- ),
- ).then((r) => (result.session_diff_preload[share.sessionID] = r)),
- Promise.all(
- item.data.map(async (diff) =>
- preloadMultiFileDiff<any>({
- oldFile: { name: diff.file, contents: diff.before },
- newFile: { name: diff.file, contents: diff.after },
- options: createDefaultOptions("split"),
- // annotations,
- }),
- ),
- ).then((r) => (result.session_diff_preload_split[share.sessionID] = r)),
- ])
break
case "message":
result.message[item.data.sessionID] = result.message[item.data.sessionID] ?? []
@@ -143,17 +108,15 @@ const getData = query(async (shareID) => {
}, "getShareData")
export default function () {
+ getRequestEvent()?.response.headers.set(
+ "Cache-Control",
+ "public, max-age=30, s-maxage=300, stale-while-revalidate=86400",
+ )
+
const params = useParams()
const data = createAsync(async () => {
if (!params.shareID) throw new Error("Missing shareID")
- const now = Date.now()
- const data = getData(params.shareID)
- console.log("getData", Date.now() - now)
- return data
- })
-
- createEffect(() => {
- console.log(data())
+ return getData(params.shareID)
})
return (
@@ -241,22 +204,8 @@ export default function () {
const provider = createMemo(() => activeMessage()?.model?.providerID)
const modelID = createMemo(() => activeMessage()?.model?.modelID)
const model = createMemo(() => data().model[data().sessionID]?.find((m) => m.id === modelID()))
- const diffs = createMemo(() => {
- const diffs = data().session_diff[data().sessionID] ?? []
- const preloaded = data().session_diff_preload[data().sessionID] ?? []
- return diffs.map((diff) => ({
- ...diff,
- preloaded: preloaded.find((d) => d.newFile.name === diff.file),
- }))
- })
- const splitDiffs = createMemo(() => {
- const diffs = data().session_diff[data().sessionID] ?? []
- const preloaded = data().session_diff_preload_split[data().sessionID] ?? []
- return diffs.map((diff) => ({
- ...diff,
- preloaded: preloaded.find((d) => d.newFile.name === diff.file),
- }))
- })
+ const diffs = createMemo(() => data().session_diff[data().sessionID] ?? [])
+ const [diffStyle, setDiffStyle] = createSignal<"unified" | "split">("unified")
const title = () => (
<div class="flex flex-col gap-4">
@@ -380,18 +329,9 @@ export default function () {
<Show when={diffs().length > 0}>
<div class="@container relative grow pt-14 flex-1 min-h-0 border-l border-border-weak-base">
<SessionReview
- class="@4xl:hidden"
diffs={diffs()}
- classes={{
- root: "pb-20",
- header: "px-6",
- container: "px-6",
- }}
- />
- <SessionReview
- split
- class="hidden @4xl:flex"
- diffs={splitDiffs()}
+ diffStyle={diffStyle()}
+ onDiffStyleChange={setDiffStyle}
classes={{
root: "pb-20",
header: "px-6",
@@ -419,11 +359,7 @@ export default function () {
<Tabs.Content value="session" class="!overflow-hidden">
{turns()}
</Tabs.Content>
- <Tabs.Content
- forceMount
- value="review"
- class="!overflow-hidden hidden data-[selected]:block"
- >
+ <Tabs.Content value="review" class="!overflow-hidden hidden data-[selected]:block">
<div class="relative h-full pt-8 overflow-y-auto no-scrollbar">
<SessionReview
diffs={diffs()}