From 32ca6e359537aff6bdf977a632e271bd491999c3 Mon Sep 17 00:00:00 2001 From: Theo Browne Date: Thu, 5 Nov 2026 17:44:38 -0800 Subject: [PATCH] feat(scheduled-tasks): tasks link to their thread Co-Authored-By: Claude Opus 5.5 --- .../SettingsScheduledTasksRouteScreen.tsx | 14 ++++++++++ .../settings/ScheduledTasksSettings.tsx | 27 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx b/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx index 34dd75e7500e8..6e90e449359ca 100644 --- a/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx +++ b/apps/mobile/src/features/settings/SettingsScheduledTasksRouteScreen.tsx @@ -18,7 +18,9 @@ import { MAX_WEBHOOK_DELIVERY_AGE_MINUTES, MAX_WEBHOOK_FILTERS, resolveEnvironmentMachineKind, + scheduledTaskThreadMode, } from "@t3tools/contracts"; +import { useSelectWorkspaceDetail } from "../layout/workspace/useSelectWorkspaceDetail"; import type { MenuAction } from "@react-native-menu/menu"; import { DateTimePicker } from "@expo/ui/community/datetime-picker"; import { @@ -1412,6 +1414,7 @@ function EnvironmentTasks({ label: "scheduled task delete", reportFailure: false, }); + const selectDetail = useSelectWorkspaceDetail(); const failure = (title: string, result: AtomCommandResult) => { if (result._tag === "Failure" && !isAtomCommandInterrupted(result)) { Dialog.alert(title, String(squashAtomCommandFailure(result))); @@ -1493,6 +1496,9 @@ function EnvironmentTasks({ {task.lastRunStatus} ) : null} + {task.threadId !== null && scheduledTaskThreadMode(task) !== "new_thread" ? ( + + ) : null} {task.lastRunError ? {task.lastRunError} : null} } @@ -847,6 +852,26 @@ function ScheduledTaskRow({ ); } +function ScheduledTaskThreadLink({ + environmentId, + threadId, +}: { + readonly environmentId: EnvironmentId; + readonly threadId: ThreadId; +}) { + const ref = scopeThreadRef(environmentId, threadId); + const title = useQuietThreadShell(ref)?.title.trim(); + return ( + + {title || "Open thread"} + + ); +} + function WebhookDeliveriesDialog({ environmentId, task,