From 19974daa67b034062e991cff6611477741c0a09d Mon Sep 17 00:00:00 2001
From: Adam <2363879+adamdotdevin@users.noreply.github.com>
Date: Thu, 30 Oct 2025 10:16:45 -0500
Subject: [PATCH] wip: desktop work
---
packages/desktop/src/components/message.tsx | 25 ++++++++++++++++--
packages/ui/src/components/card.css | 29 +++++++++++++++++++++
packages/ui/src/components/card.tsx | 22 ++++++++++++++++
packages/ui/src/components/icon.tsx | 1 +
packages/ui/src/components/index.ts | 1 +
packages/ui/src/styles/index.css | 1 +
6 files changed, 77 insertions(+), 2 deletions(-)
create mode 100644 packages/ui/src/components/card.css
create mode 100644 packages/ui/src/components/card.tsx
diff --git a/packages/desktop/src/components/message.tsx b/packages/desktop/src/components/message.tsx
index 9e9e06d3..78be29d7 100644
--- a/packages/desktop/src/components/message.tsx
+++ b/packages/desktop/src/components/message.tsx
@@ -1,8 +1,8 @@
import type { Part, TextPart, ToolPart, Message } from "@opencode-ai/sdk"
-import { createMemo, For, Show } from "solid-js"
+import { createMemo, For, Match, Show, Switch } from "solid-js"
import { Dynamic } from "solid-js/web"
import { Markdown } from "./markdown"
-import { Checkbox, Diff, Icon } from "@opencode-ai/ui"
+import { Card, Checkbox, Diff, Icon } from "@opencode-ai/ui"
import { Message as MessageDisplay, registerPartComponent } from "@opencode-ai/ui"
import { BasicTool, GenericTool, ToolRegistry, DiffChanges } from "@opencode-ai/ui"
import { getDirectory, getFilename } from "@/utils"
@@ -36,6 +36,27 @@ registerPartComponent("tool", function ToolPartDisplay(props) {
const metadata = part.state.status === "pending" ? {} : (part.state.metadata ?? {})
const input = part.state.status === "completed" ? part.state.input : {}
+ if (part.state.status === "error") {
+ const error = part.state.error.replace("Error: ", "")
+ const [title, ...rest] = error.split(": ")
+ return (
+
+
+
+
+
+
+
{title}
+
{rest.join(": ")}
+
+
+ {error}
+
+
+
+ )
+ }
+
return (
{
+ variant?: "normal" | "error" | "warning" | "success" | "info"
+}
+
+export function Card(props: CardProps) {
+ const [split, rest] = splitProps(props, ["variant", "class", "classList"])
+ return (
+
+ {props.children}
+
+ )
+}
diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx
index 5736146e..a2e12729 100644
--- a/packages/ui/src/components/icon.tsx
+++ b/packages/ui/src/components/icon.tsx
@@ -149,6 +149,7 @@ const newIcons = {
console: ``,
"code-lines": ``,
"square-arrow-top-right": ``,
+ "circle-ban-sign": ``,
}
export interface IconProps extends ComponentProps<"svg"> {
diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts
index 63be24d5..29e8cfe3 100644
--- a/packages/ui/src/components/index.ts
+++ b/packages/ui/src/components/index.ts
@@ -1,5 +1,6 @@
export * from "./accordion"
export * from "./button"
+export * from "./card"
export * from "./checkbox"
export * from "./collapsible"
export * from "./dialog"
diff --git a/packages/ui/src/styles/index.css b/packages/ui/src/styles/index.css
index 9742caa0..4fe13055 100644
--- a/packages/ui/src/styles/index.css
+++ b/packages/ui/src/styles/index.css
@@ -7,6 +7,7 @@
@import "../components/accordion.css" layer(components);
@import "../components/button.css" layer(components);
+@import "../components/card.css" layer(components);
@import "../components/checkbox.css" layer(components);
@import "../components/diff.css" layer(components);
@import "../components/diff-changes.css" layer(components);