From 342aa27e03dd0db02b60a15a1779254bce395e19 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 31 Oct 2025 15:37:45 -0500 Subject: wip: desktop work --- .../desktop/src/components/message-progress.tsx | 124 ++++++++++++--------- packages/desktop/src/components/prompt-input.tsx | 2 +- 2 files changed, 73 insertions(+), 53 deletions(-) (limited to 'packages/desktop/src/components') diff --git a/packages/desktop/src/components/message-progress.tsx b/packages/desktop/src/components/message-progress.tsx index fd66c5caf..5533ae413 100644 --- a/packages/desktop/src/components/message-progress.tsx +++ b/packages/desktop/src/components/message-progress.tsx @@ -1,7 +1,8 @@ -import { For, JSXElement, Match, Switch, createEffect, createMemo, createSignal, onCleanup } from "solid-js" -import { Part } from "@opencode-ai/ui" +import { For, JSXElement, Match, Show, Switch, createEffect, createMemo, createSignal, onCleanup } from "solid-js" +import { Markdown, Part } from "@opencode-ai/ui" import { useSync } from "@/context/sync" import type { AssistantMessage as AssistantMessageType, Part as PartType, ToolPart } from "@opencode-ai/sdk" +import { Spinner } from "./spinner" export function MessageProgress(props: { assistantMessages: () => AssistantMessageType[]; done?: boolean }) { const sync = useSync() @@ -22,37 +23,42 @@ export function MessageProgress(props: { assistantMessages: () => AssistantMessa ) as ToolPart, ) - const eligibleItems = createMemo(() => { - let allParts = parts() + const resolvedParts = createMemo(() => { + let resolved = parts() const task = currentTask() if (task && task.state && "metadata" in task.state && task.state.metadata?.sessionId) { const messages = sync.data.message[task.state.metadata.sessionId as string]?.filter((m) => m.role === "assistant") - allParts = messages?.flatMap((m) => sync.data.part[m.id]) ?? parts() + resolved = messages?.flatMap((m) => sync.data.part[m.id]) ?? parts() } - return allParts.filter( - (p) => - p?.type === "text" || - (p?.type === "reasoning" && p.time?.end) || - (p?.type === "tool" && p.state.status === "completed"), - ) + return resolved + }) + const currentText = createMemo( + () => + resolvedParts().findLast((p) => p?.type === "text")?.text || + resolvedParts().findLast((p) => p?.type === "reasoning")?.text, + ) + const eligibleItems = createMemo(() => { + return resolvedParts().filter((p) => p?.type === "tool" && p.state.status === "completed") }) const finishedItems = createMemo<(JSXElement | PartType)[]>(() => [ - "", - "", -