From 4e0ab6b6346606bc07918c6d10981729994d0cc7 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 28 Oct 2025 09:48:54 -0500 Subject: [PATCH] wip: desktop work --- .../src/components/assistant-message.tsx | 111 +++++++++++++----- packages/desktop/src/pages/index.tsx | 14 +-- packages/ui/src/styles/tailwind/utilities.css | 8 ++ packages/ui/src/styles/utilities.css | 8 ++ 4 files changed, 103 insertions(+), 38 deletions(-) diff --git a/packages/desktop/src/components/assistant-message.tsx b/packages/desktop/src/components/assistant-message.tsx index 7b4cfc71d..248af5313 100644 --- a/packages/desktop/src/components/assistant-message.tsx +++ b/packages/desktop/src/components/assistant-message.tsx @@ -15,11 +15,13 @@ import type { BashTool } from "opencode/tool/bash" import type { EditTool } from "opencode/tool/edit" import type { WriteTool } from "opencode/tool/write" import { DiffChanges } from "./diff-changes" +import { TodoWriteTool } from "opencode/tool/todo" export function AssistantMessage(props: { message: AssistantMessage; parts: Part[] }) { + const filteredParts = createMemo(() => props.parts.filter((x) => x.type !== "tool" || x.tool !== "todoread")) return (
- + {(part) => { const component = createMemo(() => PART_MAPPING[part.type as keyof typeof PART_MAPPING]) return ( @@ -88,8 +90,11 @@ function ToolPart(props: { part: ToolPart; message: AssistantMessage }) { type TriggerTitle = { title: string + titleClass?: string subtitle?: string + subtitleClass?: string args?: string[] + argsClass?: string action?: JSX.Element } @@ -99,34 +104,58 @@ const isTriggerTitle = (val: any): val is TriggerTitle => { function BasicTool(props: { icon: IconProps["name"]; trigger: TriggerTitle | JSX.Element; children?: JSX.Element }) { const resolved = children(() => props.children) - return (
- - - -
-
- - {(props.trigger as TriggerTitle).title} - - - {(props.trigger as TriggerTitle).subtitle} - - - - {(arg) => {arg}} - - -
- {(props.trigger as TriggerTitle).action} -
-
- {props.trigger as JSX.Element} -
+ +
+ + + {(trigger) => ( +
+
+ + {trigger().title} + + + + {trigger().subtitle} + + + + + {(arg) => ( + + {arg} + + )} + + +
+ {trigger().action} +
+ )} +
+ {props.trigger as JSX.Element} +
+
@@ -178,7 +207,7 @@ ToolRegistry.register({ return ( ) }, @@ -188,7 +217,7 @@ ToolRegistry.register({ name: "list", render(props) { return ( - +
{props.output}
@@ -204,7 +233,7 @@ ToolRegistry.register({ ({ @@ -311,7 +341,7 @@ ToolRegistry.register({ icon="code-lines" trigger={
-
+
Edit
@@ -340,7 +370,7 @@ ToolRegistry.register({ icon="code-lines" trigger={
-
+
Write
@@ -360,3 +390,22 @@ ToolRegistry.register({ ) }, }) + +ToolRegistry.register({ + name: "todowrite", + render(props) { + return ( + t.status === "completed").length}/${props.input.todos?.length}`, + }} + > + +
{props.output}
+
+
+ ) + }, +}) diff --git a/packages/desktop/src/pages/index.tsx b/packages/desktop/src/pages/index.tsx index 7da925459..42e96e32e 100644 --- a/packages/desktop/src/pages/index.tsx +++ b/packages/desktop/src/pages/index.tsx @@ -696,24 +696,24 @@ export default function Page() { -
-
+
+
-
+
- - {getDirectory(diff.file)} + + {getDirectory(diff.file)}‎ - + {getFilename(diff.file)}
-
+
diff --git a/packages/ui/src/styles/tailwind/utilities.css b/packages/ui/src/styles/tailwind/utilities.css index f3bedca37..fbb407b1d 100644 --- a/packages/ui/src/styles/tailwind/utilities.css +++ b/packages/ui/src/styles/tailwind/utilities.css @@ -7,3 +7,11 @@ scrollbar-width: none; /* Firefox */ } } + +@utility truncate-start { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + direction: rtl; + text-align: left; +} diff --git a/packages/ui/src/styles/utilities.css b/packages/ui/src/styles/utilities.css index 7d14b6539..99b7760a0 100644 --- a/packages/ui/src/styles/utilities.css +++ b/packages/ui/src/styles/utilities.css @@ -48,6 +48,14 @@ border-width: 0; } +.truncate-start { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + direction: rtl; + text-align: left; +} + .text-12-regular { font-family: var(--font-family-sans); font-size: var(--font-size-small);