mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-22 18:24:21 +01:00
wip: desktop work
This commit is contained in:
@@ -37,7 +37,7 @@ export function MessageProgress(props: { assistantMessages: () => AssistantMessa
|
|||||||
// resolvedParts().findLast((p) => p?.type === "reasoning")?.text,
|
// resolvedParts().findLast((p) => p?.type === "reasoning")?.text,
|
||||||
// )
|
// )
|
||||||
const eligibleItems = createMemo(() => {
|
const eligibleItems = createMemo(() => {
|
||||||
return resolvedParts().filter((p) => p?.type === "tool" && p.state.status === "completed") as ToolPart[]
|
return resolvedParts().filter((p) => p?.type === "tool" && p?.state.status === "completed") as ToolPart[]
|
||||||
})
|
})
|
||||||
const finishedItems = createMemo<(JSXElement | ToolPart)[]>(() => [
|
const finishedItems = createMemo<(JSXElement | ToolPart)[]>(() => [
|
||||||
<div class="h-8 w-full" />,
|
<div class="h-8 w-full" />,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
ProgressCircle,
|
ProgressCircle,
|
||||||
Message,
|
Message,
|
||||||
Typewriter,
|
Typewriter,
|
||||||
|
Card,
|
||||||
} from "@opencode-ai/ui"
|
} from "@opencode-ai/ui"
|
||||||
import { FileIcon } from "@/ui"
|
import { FileIcon } from "@/ui"
|
||||||
import FileTree from "@/components/file-tree"
|
import FileTree from "@/components/file-tree"
|
||||||
@@ -547,7 +548,13 @@ export default function Page() {
|
|||||||
<For each={local.session.userMessages()}>
|
<For each={local.session.userMessages()}>
|
||||||
{(message) => {
|
{(message) => {
|
||||||
const diffs = createMemo(() => message.summary?.diffs ?? [])
|
const diffs = createMemo(() => message.summary?.diffs ?? [])
|
||||||
const working = createMemo(() => !message.summary?.body)
|
const assistantMessages = createMemo(() => {
|
||||||
|
return sync.data.message[activeSession().id]?.filter(
|
||||||
|
(m) => m.role === "assistant" && m.parentID == message.id,
|
||||||
|
) as AssistantMessageType[]
|
||||||
|
})
|
||||||
|
const error = createMemo(() => assistantMessages().find((m) => m?.error)?.error)
|
||||||
|
const working = createMemo(() => !message.summary?.body && !error())
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li class="group/li flex items-center self-stretch">
|
<li class="group/li flex items-center self-stretch">
|
||||||
@@ -586,23 +593,24 @@ export default function Page() {
|
|||||||
{(message) => {
|
{(message) => {
|
||||||
const isActive = createMemo(() => local.session.activeMessage()?.id === message.id)
|
const isActive = createMemo(() => local.session.activeMessage()?.id === message.id)
|
||||||
const [titled, setTitled] = createSignal(!!message.summary?.title)
|
const [titled, setTitled] = createSignal(!!message.summary?.title)
|
||||||
const [completed, setCompleted] = createSignal(!!message.summary?.body)
|
|
||||||
const [expanded, setExpanded] = createSignal(false)
|
|
||||||
const parts = createMemo(() => sync.data.part[message.id])
|
|
||||||
const title = createMemo(() => message.summary?.title)
|
|
||||||
const summary = createMemo(() => message.summary?.body)
|
|
||||||
const diffs = createMemo(() => message.summary?.diffs ?? [])
|
|
||||||
const assistantMessages = createMemo(() => {
|
const assistantMessages = createMemo(() => {
|
||||||
return sync.data.message[activeSession().id]?.filter(
|
return sync.data.message[activeSession().id]?.filter(
|
||||||
(m) => m.role === "assistant" && m.parentID == message.id,
|
(m) => m.role === "assistant" && m.parentID == message.id,
|
||||||
) as AssistantMessageType[]
|
) as AssistantMessageType[]
|
||||||
})
|
})
|
||||||
|
const error = createMemo(() => assistantMessages().find((m) => m?.error)?.error)
|
||||||
|
const [completed, setCompleted] = createSignal(!!message.summary?.body || !!error())
|
||||||
|
const [expanded, setExpanded] = createSignal(false)
|
||||||
|
const parts = createMemo(() => sync.data.part[message.id])
|
||||||
|
const title = createMemo(() => message.summary?.title)
|
||||||
|
const summary = createMemo(() => message.summary?.body)
|
||||||
|
const diffs = createMemo(() => message.summary?.diffs ?? [])
|
||||||
const hasToolPart = createMemo(() =>
|
const hasToolPart = createMemo(() =>
|
||||||
assistantMessages()
|
assistantMessages()
|
||||||
?.flatMap((m) => sync.data.part[m.id])
|
?.flatMap((m) => sync.data.part[m.id])
|
||||||
.some((p) => p?.type === "tool"),
|
.some((p) => p?.type === "tool"),
|
||||||
)
|
)
|
||||||
const working = createMemo(() => !summary())
|
const working = createMemo(() => !summary() && !error())
|
||||||
|
|
||||||
// allowing time for the animations to finish
|
// allowing time for the animations to finish
|
||||||
createEffect(() => {
|
createEffect(() => {
|
||||||
@@ -610,8 +618,8 @@ export default function Page() {
|
|||||||
setTimeout(() => setTitled(!!title()), 10_000)
|
setTimeout(() => setTitled(!!title()), 10_000)
|
||||||
})
|
})
|
||||||
createEffect(() => {
|
createEffect(() => {
|
||||||
summary()
|
const complete = !!summary() || !!error()
|
||||||
setTimeout(() => setCompleted(!!summary()), 1200)
|
setTimeout(() => setCompleted(complete), 1200)
|
||||||
})
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -707,6 +715,11 @@ export default function Page() {
|
|||||||
</Accordion>
|
</Accordion>
|
||||||
</div>
|
</div>
|
||||||
</Show>
|
</Show>
|
||||||
|
<Show when={error() && !expanded()}>
|
||||||
|
<Card variant="error" class="text-text-on-critical-base">
|
||||||
|
{error()?.data?.message as string}
|
||||||
|
</Card>
|
||||||
|
</Show>
|
||||||
{/* Response */}
|
{/* Response */}
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<Switch>
|
<Switch>
|
||||||
@@ -736,6 +749,11 @@ export default function Page() {
|
|||||||
return <Message message={assistantMessage} parts={parts()} />
|
return <Message message={assistantMessage} parts={parts()} />
|
||||||
}}
|
}}
|
||||||
</For>
|
</For>
|
||||||
|
<Show when={error()}>
|
||||||
|
<Card variant="error" class="text-text-on-critical-base">
|
||||||
|
{error()?.data?.message as string}
|
||||||
|
</Card>
|
||||||
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
</Collapsible.Content>
|
</Collapsible.Content>
|
||||||
</Collapsible>
|
</Collapsible>
|
||||||
|
|||||||
Reference in New Issue
Block a user