From bd008bde5ccdb95374135c94922e0eacd7e98134 Mon Sep 17 00:00:00 2001 From: Ayush Yadav Date: Wed, 28 Oct 2026 21:27:11 +0530 Subject: [PATCH 1/4] chore(mobile): remove the unused Today screen TodayScreen is never rendered: the app opens Chat for the 'today' section and no file imports the screen. Remove it and the imports only it used. The 'today' to Chat redirect stays for existing links. --- apps/mobile/src/screens.tsx | 319 ------------------------------------ 1 file changed, 319 deletions(-) diff --git a/apps/mobile/src/screens.tsx b/apps/mobile/src/screens.tsx index 5f2345a84..b1357dc6b 100644 --- a/apps/mobile/src/screens.tsx +++ b/apps/mobile/src/screens.tsx @@ -4,7 +4,6 @@ import { ArrowDownToLine, ArrowUpRight, CalendarDays, - Check, CheckCheck, ChevronLeft, ChevronRight, @@ -29,7 +28,6 @@ import { Pressable, Text, TextInput, - useWindowDimensions, View, } from "react-native"; import type { @@ -51,7 +49,6 @@ import { ErrorNotice, IconButton, LinkRow, - Mascot, relativeDate, resultSummary, SectionHeading, @@ -68,322 +65,6 @@ function todayDate() { function eventDate(event: CalendarEvent) { return event.allDay ? event.start : localDateTime(event.start, event.timeZone).date; } -export function TodayScreen() { - const { workspace: w, navigate, open, ask } = useWorkspace(); - const wide = useWindowDimensions().width > 1180; - const pending = w.actions.filter((a) => a.status === "awaiting_review"); - const unread = w.mail.filter((m) => m.unread); - const today = todayDate(); - const events = w.events - .filter((e) => eventDate(e) === today) - .sort((a, b) => a.start.localeCompare(b.start)); - return ( - - - - - - A little clarity, every day - - - Your day, with a little{"\n"}more room to breathe. - - - {events.length ? `${events.length} things on your calendar` : "Your calendar has room"} - {unread.length ? `, ${unread.length} unread emails` : ""}.{"\n"}Let’s make space for - what matters. - - - - {wide && ( - - - - - - - A lighter day - - - - Everything, together - - - )} - - - {[ - { - label: "UNREAD EMAILS", - value: unread.length, - note: "A fresh look at your inbox", - icon: Mail, - section: "mail" as const, - tint: colors.sky, - }, - { - label: "ON THE CALENDAR", - value: events.length, - note: "Make room for your priorities", - icon: CalendarDays, - section: "calendar" as const, - tint: colors.green, - }, - { - label: "WAITING FOR YOU", - value: pending.length, - note: "Your review keeps things moving", - icon: ShieldCheck, - section: "activity" as const, - tint: colors.lavender, - }, - ].map((item) => ( - navigate(item.section)} - style={{ flex: 1, minWidth: 180 }} - > - - - {item.label} - - - - - - {String(item.value).padStart(2, "0")} - - {item.note} - - - ))} - - - - navigate("calendar")} - /> - {events.length ? ( - events.slice(0, 3).map((e, i) => ) - ) : ( - - )} - open({ type: "event" })} - style={[ - s.row, - { - gap: 8, - paddingTop: 15, - marginTop: 9, - borderTopWidth: 1, - borderTopColor: colors.line, - }, - ]} - > - - Make time for something - - - - navigate("mail")} - /> - {w.mail.length ? ( - w.mail.slice(0, 3).map((m, i) => ( - open({ type: "mail", mail: m })} - style={[ - s.row, - { - gap: 12, - paddingVertical: 13, - borderTopWidth: i ? 1 : 0, - borderTopColor: colors.line, - }, - ]} - > - - - - {m.sender} - {timeLabel(m.date)} - - - {m.subject} - - - {m.body.replace(/\n/g, " ")} - - - {m.unread && ( - - )} - - )) - ) : ( - - )} - - - - - - - Start with a thought. We’ll take it from there. - - {[ - "What needs my attention today?", - "Help me catch up on my inbox", - "Show my recent documents", - ].map((prompt) => ( - ask(prompt)} - style={[ - s.between, - { borderTopWidth: 1, borderTopColor: "#E1E2D9", paddingVertical: 13 }, - ]} - > - {prompt} - - - ))} - - - navigate("activity")} - /> - {pending.length - ? pending - .slice(0, 3) - .map((a) => ( - open({ type: "review", action: a })} - icon={ShieldCheck} - tint={colors.lavender} - /> - )) - : w.activity.slice(0, 3).map((a) => ( - - - - - - {a.title} - {relativeDate(a.date)} - - - ))} - {!pending.length && !w.activity.length && ( - - Your workspace is ready. Things you do here will appear in your activity. - - )} - - - - ); -} function Avatar({ name, index = 0 }: { name: string; index?: number }) { return ( Date: Wed, 28 Oct 2026 21:27:11 +0530 Subject: [PATCH 2/4] chore(mobile): remove the unused ChatWork component Nothing renders ChatWork; tasks in a chat are shown by thread-artifacts. --- apps/mobile/src/agent-ui.tsx | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/apps/mobile/src/agent-ui.tsx b/apps/mobile/src/agent-ui.tsx index ead833976..3f5716093 100644 --- a/apps/mobile/src/agent-ui.tsx +++ b/apps/mobile/src/agent-ui.tsx @@ -164,21 +164,6 @@ export function TaskCard({ ); } -export function ChatWork() { - const { data } = useAgentWorkspace(); - const tasks = [...(data?.tasks || [])] - .filter(activeTask) - .sort((a, b) => b.createdAt.localeCompare(a.createdAt)) - .slice(0, 2); - if (!tasks.length) return null; - return ( - - {tasks.map((task) => ( - - ))} - - ); -} export function AgentActivityScreen() { const { data } = useAgentWorkspace(); const [filter, setFilter] = useState("All"); From 831f2d7617e376356a5c56e61895a988a1397b0f Mon Sep 17 00:00:00 2001 From: Ayush Yadav Date: Wed, 28 Oct 2026 21:27:11 +0530 Subject: [PATCH 3/4] chore(domain): remove the unused ExecutionBackend interface No code implements or references it. --- packages/domain/src/index.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/domain/src/index.ts b/packages/domain/src/index.ts index 20008d2be..0bb09f7e8 100644 --- a/packages/domain/src/index.ts +++ b/packages/domain/src/index.ts @@ -202,11 +202,4 @@ export interface Workspace { }; } -/** Provider-independent boundary: OpenBot/AG-UI runs never dictate presentation. */ -export interface ExecutionBackend { - readonly kind: "standalone" | "openbot"; - readonly capabilities: readonly string[]; - health(): Promise<{ available: boolean; detail: string }>; -} - export type { ComputerCommand, ComputerDirectory, ComputerSnapshot } from "./computer.ts"; From 349ce05e93ee5a5aacd1a65645bbb8662f0d06c2 Mon Sep 17 00:00:00 2001 From: Ayush Yadav Date: Wed, 28 Oct 2026 21:27:11 +0530 Subject: [PATCH 4/4] chore(mobile): drop the unused toolCallId prop from DesktopToolCard The card never read it, but both callers had to pass it. --- apps/mobile/src/chat.tsx | 5 ++--- apps/mobile/src/desktop-tool-card.tsx | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/mobile/src/chat.tsx b/apps/mobile/src/chat.tsx index 746ce12d2..fb04389ee 100644 --- a/apps/mobile/src/chat.tsx +++ b/apps/mobile/src/chat.tsx @@ -94,8 +94,8 @@ export function WorkspaceTools() { name: "use_desktop", description: "Show the agent working on the computer's desktop", parameters: displayParameters, - render: ({ toolCallId, result, status }) => ( - + render: ({ result, status }) => ( + ), }); useRenderTool({ @@ -653,7 +653,6 @@ export function ChatScreen({ {!!latestDesktop && ( message.role === "tool" && message.toolCallId === latestDesktop, diff --git a/apps/mobile/src/desktop-tool-card.tsx b/apps/mobile/src/desktop-tool-card.tsx index cce31a1a6..2f8e07cf3 100644 --- a/apps/mobile/src/desktop-tool-card.tsx +++ b/apps/mobile/src/desktop-tool-card.tsx @@ -30,7 +30,6 @@ export function DesktopToolCard({ live = false, loading, }: { - toolCallId: string; live?: boolean; result: unknown; loading: boolean;