From c0a35141e6b70eed1a9ba576fe43b7f7d690b968 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 2 Dec 2025 06:50:16 -0600 Subject: [PATCH] feat: better code and diff rendering performance --- .opencode/opencode.jsonc | 15 ++- bun.lock | 4 +- package.json | 2 +- packages/desktop/src/pages/session.tsx | 4 + .../enterprise/src/routes/share/[shareID].tsx | 11 ++- packages/ui/package.json | 2 +- packages/ui/src/components/code.tsx | 29 +++++- packages/ui/src/components/diff-ssr.tsx | 75 +++++++++++++++ packages/ui/src/components/diff.tsx | 96 +++++-------------- packages/ui/src/components/message-part.tsx | 32 +++++-- packages/ui/src/components/session-review.tsx | 8 +- packages/ui/src/components/session-turn.tsx | 31 +++++- .../{components/pierre.ts => pierre/index.ts} | 11 ++- packages/ui/src/pierre/worker.ts | 5 + 14 files changed, 225 insertions(+), 100 deletions(-) create mode 100644 packages/ui/src/components/diff-ssr.tsx rename packages/ui/src/{components/pierre.ts => pierre/index.ts} (89%) create mode 100644 packages/ui/src/pierre/worker.ts diff --git a/.opencode/opencode.jsonc b/.opencode/opencode.jsonc index 68097c8d9..b078ff4eb 100644 --- a/.opencode/opencode.jsonc +++ b/.opencode/opencode.jsonc @@ -1,9 +1,11 @@ { "$schema": "https://opencode.ai/config.json", - "plugin": ["opencode-openai-codex-auth"], - "enterprise": { - "url": "https://enterprise.dev.opencode.ai", - }, + "plugin": [ + "opencode-openai-codex-auth" + ], + // "enterprise": { + // "url": "https://enterprise.dev.opencode.ai", + // }, "provider": { "opencode": { "options": { @@ -18,7 +20,10 @@ }, "morph": { "type": "local", - "command": ["bunx", "@morphllm/morphmcp"], + "command": [ + "bunx", + "@morphllm/morphmcp" + ], "environment": { "ENABLED_TOOLS": "warp_grep", }, diff --git a/bun.lock b/bun.lock index bdadce801..91fb11784 100644 --- a/bun.lock +++ b/bun.lock @@ -443,7 +443,7 @@ "@hono/zod-validator": "0.4.2", "@kobalte/core": "0.13.11", "@openauthjs/openauth": "0.0.0-20250322224806", - "@pierre/precision-diffs": "0.5.7", + "@pierre/precision-diffs": "0.6.0-beta.3", "@solidjs/meta": "0.29.4", "@solidjs/router": "0.15.4", "@solidjs/start": "https://pkg.pr.new/@solidjs/start@dfb2020", @@ -1218,7 +1218,7 @@ "@petamoriken/float16": ["@petamoriken/float16@3.9.3", "", {}, "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g=="], - "@pierre/precision-diffs": ["@pierre/precision-diffs@0.5.7", "", { "dependencies": { "@shikijs/core": "3.15.0", "@shikijs/transformers": "3.15.0", "diff": "8.0.2", "fast-deep-equal": "3.1.3", "hast-util-to-html": "9.0.5", "shiki": "3.15.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-Y+e4kJ9pT2I4NS5fE39KdoiXtwMkVPRvrwLM6O2IqO7PDCRWLBS7CYxcSgSyngEndccUll2krx66I2QnfO0Ovg=="], + "@pierre/precision-diffs": ["@pierre/precision-diffs@0.6.0-beta.3", "", { "dependencies": { "@shikijs/core": "3.15.0", "@shikijs/transformers": "3.15.0", "diff": "8.0.2", "fast-deep-equal": "3.1.3", "hast-util-to-html": "9.0.5", "shiki": "3.15.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-1FBm9jhLWZvs7BqN3yG2Wh9SpGuO1us2QsKZlQqSwyCctMr9DRGzYQJ9lF6yR03LHzXs3fuIzO++d9sCObYzrQ=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], diff --git a/package.json b/package.json index e85f08e4e..a5e7c1462 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@tsconfig/bun": "1.0.9", "@cloudflare/workers-types": "4.20251008.0", "@openauthjs/openauth": "0.0.0-20250322224806", - "@pierre/precision-diffs": "0.5.7", + "@pierre/precision-diffs": "0.6.0-beta.3", "@tailwindcss/vite": "4.1.11", "diff": "8.0.2", "ai": "5.0.97", diff --git a/packages/desktop/src/pages/session.tsx b/packages/desktop/src/pages/session.tsx index 281b6765a..ddc2a60c5 100644 --- a/packages/desktop/src/pages/session.tsx +++ b/packages/desktop/src/pages/session.tsx @@ -30,6 +30,7 @@ import { useSync } from "@/context/sync" import { useSession } from "@/context/session" import { useLayout } from "@/context/layout" import { getDirectory, getFilename } from "@opencode-ai/util/path" +import { Diff } from "@opencode-ai/ui/diff" export default function Page() { const layout = useLayout() @@ -357,6 +358,7 @@ export default function Page() { content: "pb-20", container: "w-full " + (wide() ? "max-w-146 mx-auto px-6" : "pr-6 pl-18"), }} + diffComponent={Diff} /> @@ -405,6 +407,7 @@ export default function Page() { container: "px-6", }} diffs={session.diffs()} + diffComponent={Diff} actions={ diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx index b95004749..f579bfa03 100644 --- a/packages/enterprise/src/routes/share/[shareID].tsx +++ b/packages/enterprise/src/routes/share/[shareID].tsx @@ -18,6 +18,10 @@ import z from "zod" import NotFound from "../[...404]" import { Tabs } from "@opencode-ai/ui/tabs" import { preloadMultiFileDiff, PreloadMultiFileDiffResult } from "@pierre/precision-diffs/ssr" +import { Diff } from "@opencode-ai/ui/diff-ssr" +import { clientOnly } from "@solidjs/start" + +const ClientOnlyDiff = clientOnly(() => import("@opencode-ai/ui/diff").then((m) => ({ default: m.Diff }))) const SessionDataMissingError = NamedError.create( "SessionDataMissingError", @@ -230,6 +234,7 @@ export default function () { "flex flex-col justify-between !overflow-visible [&_[data-slot=session-turn-message-header]]:top-[-32px]", container: "px-4", }} + diffComponent={ClientOnlyDiff} /> )} @@ -299,6 +304,7 @@ export default function () { content: "flex flex-col justify-between items-start", container: "w-full pb-20 " + (wide() ? "max-w-146 mx-auto px-6" : "pr-6 pl-18"), }} + diffComponent={ClientOnlyDiff} >
@@ -311,6 +317,7 @@ export default function () {