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 --- packages/desktop/src/pages/index.tsx | 108 +++++++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 10 deletions(-) (limited to 'packages/desktop/src/pages') diff --git a/packages/desktop/src/pages/index.tsx b/packages/desktop/src/pages/index.tsx index 929aeda7a..35e415aaf 100644 --- a/packages/desktop/src/pages/index.tsx +++ b/packages/desktop/src/pages/index.tsx @@ -548,7 +548,79 @@ export default function Page() { {(message) => { const diffs = createMemo(() => message.summary?.diffs ?? []) - const working = createMemo(() => !message.summary?.title) + 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 parts = createMemo(() => + assistantMessages().flatMap((m) => sync.data.part[m.id]), + ) + const lastPart = createMemo(() => parts().slice(-1)?.at(0)) + const rawStatus = createMemo(() => { + const defaultStatus = "Working..." + const last = lastPart() + if (!last) return defaultStatus + + if (last.type === "tool") { + switch (last.tool) { + case "task": + return "Delegating work..." + case "todowrite": + case "todoread": + return "Planning next steps..." + case "read": + return "Gathering context..." + case "list": + case "grep": + case "glob": + return "Searching the codebase..." + case "webfetch": + return "Searching the web..." + case "edit": + case "write": + return "Making edits..." + case "bash": + return "Running commands..." + default: + break + } + } else if (last.type === "reasoning") { + return "Thinking..." + } else if (last.type === "text") { + return "Gathering thoughts..." + } + return defaultStatus + }) + + const [status, setStatus] = createSignal(rawStatus()) + let lastStatusChange = Date.now() + let statusTimeout: number | undefined + + createEffect(() => { + const newStatus = rawStatus() + if (newStatus === status()) return + + const timeSinceLastChange = Date.now() - lastStatusChange + + if (timeSinceLastChange >= 1000) { + setStatus(newStatus) + lastStatusChange = Date.now() + if (statusTimeout) { + clearTimeout(statusTimeout) + statusTimeout = undefined + } + } else { + if (statusTimeout) clearTimeout(statusTimeout) + statusTimeout = setTimeout(() => { + setStatus(rawStatus()) + lastStatusChange = Date.now() + statusTimeout = undefined + }, 1000 - timeSinceLastChange) as unknown as number + } + }) + return (
  • @@ -604,10 +679,12 @@ export default function Page() { // allowing time for the animations to finish createEffect(() => { + title() setTimeout(() => setTitled(!!title()), 10_000) }) createEffect(() => { - setTimeout(() => setCompleted(!!summary()), 3_000) + summary() + setTimeout(() => setCompleted(!!summary()), 1200) }) return ( @@ -618,9 +695,18 @@ export default function Page() { > {/* Title */}
    -
    - }> -

    {title()}

    +
    + + } + > +

    {title()}

    @@ -628,7 +714,7 @@ export default function Page() {
    {/* Summary */} - +

    @@ -637,7 +723,9 @@ export default function Page() { Response

    - {(summary) => } + + {(summary) => } +
    @@ -699,8 +787,8 @@ export default function Page() {
    - Hide steps - Show steps + Hide details + Show details
    -- cgit v1.2.3