From a8bf1ad40f9aa48c8207d92ce3fee794f9d38279 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 31 Oct 2025 10:08:24 -0500 Subject: wip: desktop work --- packages/desktop/src/context/sync.tsx | 5 ++- packages/desktop/src/pages/index.tsx | 58 ++++++++++++++++++----------------- 2 files changed, 34 insertions(+), 29 deletions(-) (limited to 'packages/desktop/src') diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx index ce2fa1ea4..c60206b0b 100644 --- a/packages/desktop/src/context/sync.tsx +++ b/packages/desktop/src/context/sync.tsx @@ -124,7 +124,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ const absolute = (path: string) => (store.path.directory + "/" + path).replace("//", "/") const sanitizePart = (part: Part) => { if (part.type === "tool") { - if (part.state.status === "completed") { + if (part.state.status === "completed" || part.state.status === "error") { for (const key in part.state.metadata) { if (typeof part.state.metadata[key] === "string") { part.state.metadata[key] = sanitize(part.state.metadata[key] as string) @@ -135,6 +135,9 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ part.state.input[key] = sanitize(part.state.input[key] as string) } } + if ("error" in part.state) { + part.state.error = sanitize(part.state.error as string) + } } } return part diff --git a/packages/desktop/src/pages/index.tsx b/packages/desktop/src/pages/index.tsx index 01fe4b508..5b2f4ecc1 100644 --- a/packages/desktop/src/pages/index.tsx +++ b/packages/desktop/src/pages/index.tsx @@ -53,10 +53,11 @@ export default function Page() { const [activeItem, setActiveItem] = createSignal(undefined) createEffect(() => { - if (!local.session.activeMessage()) return - if (!messageScrollElement) return - const element = messageScrollElement.querySelector(`[data-message="${local.session.activeMessage()?.id}"]`) - element?.scrollIntoView({ block: "start", behavior: "instant" }) + // Set first message as active if none selected + const userMessages = local.session.userMessages() + if (userMessages.length > 0 && !local.session.activeMessage()) { + local.session.setActiveMessage(userMessages[0].id) + } }) const MOD = typeof navigator === "object" && /(Mac|iPod|iPhone|iPad)/.test(navigator.platform) ? "Meta" : "Control" @@ -567,28 +568,29 @@ export default function Page() {
-
- - {(message) => { - const [initialized, setInitialized] = createSignal(!!message.summary?.title) - 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 assistantMessages = createMemo(() => { - return sync.data.message[activeSession().id]?.filter( - (m) => m.role === "assistant" && m.parentID == message.id, - ) as AssistantMessageType[] - }) - const working = createMemo(() => !summary()) - createEffect(() => { - setTimeout(() => setInitialized(!!title()), 10_000) - }) - - return ( + + {(message) => { + const isActive = createMemo(() => local.session.activeMessage()?.id === message.id) + const [initialized, setInitialized] = createSignal(!!message.summary?.title) + 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 assistantMessages = createMemo(() => { + return sync.data.message[activeSession().id]?.filter( + (m) => m.role === "assistant" && m.parentID == message.id, + ) as AssistantMessageType[] + }) + const working = createMemo(() => !summary()) + createEffect(() => { + setTimeout(() => setInitialized(!!title()), 10_000) + }) + + return ( +
{/* Title */}
@@ -774,10 +776,10 @@ export default function Page() {
- ) - }} -
-
+ + ) + }} +
-- cgit v1.2.3