Skip to content

Commit cc577f1

Browse files
Adopt shared cloud task architecture
Generated-By: PostHog Code Task-Id: 40c57a59-b4e1-4760-8e56-ecd03e9c2f0f
1 parent 54e687e commit cc577f1

49 files changed

Lines changed: 767 additions & 997 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/mobile/src/app/(tabs)/inbox.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { INBOX_PIPELINE_STATUSES } from "@posthog/core/inbox/reportFiltering";
2+
import type { SignalReport } from "@posthog/shared/domain-types";
13
import { useFocusEffect, useRouter } from "expo-router";
24
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
35
import { View } from "react-native";
@@ -20,12 +22,8 @@ import {
2022
decidedIds,
2123
useDismissedReportsStore,
2224
} from "@/features/inbox/stores/dismissedReportsStore";
23-
import {
24-
DEFAULT_STATUS_FILTER,
25-
useInboxFilterStore,
26-
} from "@/features/inbox/stores/inboxFilterStore";
25+
import { useInboxFilterStore } from "@/features/inbox/stores/inboxFilterStore";
2726
import { useInboxStore } from "@/features/inbox/stores/inboxStore";
28-
import type { SignalReport } from "@/features/inbox/types";
2927
import { buildInboxViewedProperties } from "@/features/inbox/utils";
3028
import { useIntegrations } from "@/features/tasks/hooks/useIntegrations";
3129
import { ANALYTICS_EVENTS, useAnalytics } from "@/lib/analytics";
@@ -74,7 +72,7 @@ export default function InboxScreen() {
7472
statusFilter,
7573
suggestedReviewerFilter,
7674
priorityFilter,
77-
defaultStatusFilter: DEFAULT_STATUS_FILTER,
75+
defaultStatusFilter: INBOX_PIPELINE_STATUSES,
7876
}),
7977
);
8078
}, [

apps/mobile/src/app/inbox/[...id].tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
import { Text } from "@components/text";
2+
import {
3+
formatSignalReportSummaryMarkdown,
4+
inboxStatusLabel,
5+
} from "@posthog/core/inbox/reportPresentation";
6+
import { DISMISSAL_REASON_OPTIONS } from "@posthog/shared";
7+
import type {
8+
ActionabilityJudgmentContent,
9+
SignalFindingContent,
10+
SignalReportPriority,
11+
SignalReportStatus,
12+
SuggestedReviewersArtefact,
13+
} from "@posthog/shared/domain-types";
214
import { differenceInHours, format, formatDistanceToNow } from "date-fns";
315
import * as Haptics from "expo-haptics";
416
import { useLocalSearchParams, useRouter } from "expo-router";
@@ -39,25 +51,13 @@ import {
3951
type ReviewerActionExtra,
4052
SuggestedReviewers,
4153
} from "@/features/inbox/components/SuggestedReviewers";
42-
import { DISMISSAL_REASON_OPTIONS } from "@/features/inbox/constants";
4354
import { useInboxEngagementTracker } from "@/features/inbox/hooks/useInboxEngagementTracker";
4455
import {
4556
useInboxReport,
4657
useInboxReportArtefacts,
4758
useInboxReportSignals,
4859
} from "@/features/inbox/hooks/useInboxReports";
4960
import { useInboxStore } from "@/features/inbox/stores/inboxStore";
50-
import type {
51-
ActionabilityJudgmentContent,
52-
SignalFindingContent,
53-
SignalReportPriority,
54-
SignalReportStatus,
55-
SuggestedReviewersArtefact,
56-
} from "@/features/inbox/types";
57-
import {
58-
formatSignalReportSummaryMarkdown,
59-
inboxStatusLabel,
60-
} from "@/features/inbox/utils";
6161
import { PrStatusBadge } from "@/features/tasks/components/PrStatusBadge";
6262
import {
6363
computeReportAgeHours,

apps/mobile/src/app/task/[id].tsx

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
import { Text } from "@components/text";
2+
import { DEFAULT_CLAUDE_EXECUTION_MODE } from "@posthog/core/sessions/executionModes";
23
import {
34
countUserMessages,
45
getSessionActivityPhase,
56
} from "@posthog/core/sessions/sessionActivity";
67
import { isTaskRunning } from "@posthog/core/tasks/taskArchive";
7-
import type { Task } from "@posthog/shared";
8+
import {
9+
DEFAULT_GATEWAY_MODEL,
10+
DEFAULT_REASONING_EFFORT,
11+
type ExecutionMode,
12+
getReasoningEffortOptions,
13+
type SupportedReasoningEffort,
14+
serializeCloudPrompt,
15+
type Task,
16+
} from "@posthog/shared";
817
import { useQueryClient } from "@tanstack/react-query";
918
import * as Haptics from "expo-haptics";
1019
import { useLocalSearchParams, useRouter } from "expo-router";
@@ -20,24 +29,14 @@ import { useReanimatedKeyboardAnimation } from "react-native-keyboard-controller
2029
import Animated, { useAnimatedStyle } from "react-native-reanimated";
2130
import { FloatingBackButton } from "@/components/FloatingBackButton";
2231
import { usePreferencesStore } from "@/features/preferences/stores/preferencesStore";
23-
import { runTaskInCloud } from "@/features/tasks/api";
2432
import { CustomImageBadge } from "@/features/tasks/components/CustomImageBadge";
2533
import { FloatingTaskHeader } from "@/features/tasks/components/FloatingTaskHeader";
2634
import { PrDiffStatsBadge } from "@/features/tasks/components/PrDiffStatsBadge";
2735
import { PrStatusBadge } from "@/features/tasks/components/PrStatusBadge";
2836
import { StopRunButton } from "@/features/tasks/components/StopRunButton";
2937
import { TaskSessionView } from "@/features/tasks/components/TaskSessionView";
3038
import { buildCloudPromptBlocks } from "@/features/tasks/composer/attachments/buildCloudPrompt";
31-
import { serializeCloudPrompt } from "@/features/tasks/composer/attachments/cloudPrompt";
3239
import type { PendingAttachment } from "@/features/tasks/composer/attachments/types";
33-
import {
34-
DEFAULT_EXECUTION_MODE,
35-
DEFAULT_MODEL,
36-
DEFAULT_REASONING,
37-
type ExecutionMode,
38-
modelSupportsReasoning,
39-
type ReasoningEffort,
40-
} from "@/features/tasks/composer/options";
4140
import { QueuedMessagesDock } from "@/features/tasks/composer/QueuedMessagesDock";
4241
import { TaskChatComposer } from "@/features/tasks/composer/TaskChatComposer";
4342
import {
@@ -169,10 +168,10 @@ export default function TaskDetailScreen() {
169168
string | undefined
170169
>();
171170
const composerMode: ExecutionMode =
172-
composerConfig?.mode ?? DEFAULT_EXECUTION_MODE;
173-
const composerModel = composerConfig?.model ?? DEFAULT_MODEL;
174-
const composerReasoning: ReasoningEffort =
175-
composerConfig?.reasoning ?? DEFAULT_REASONING;
171+
composerConfig?.mode ?? DEFAULT_CLAUDE_EXECUTION_MODE;
172+
const composerModel = composerConfig?.model ?? DEFAULT_GATEWAY_MODEL;
173+
const composerReasoning: SupportedReasoningEffort =
174+
composerConfig?.reasoning ?? DEFAULT_REASONING_EFFORT;
176175

177176
const messagingMode = useMessagingMode(taskId);
178177
const queuedCount = useQueuedCount(taskId);
@@ -312,16 +311,21 @@ export default function TaskDetailScreen() {
312311
)
313312
: text;
314313

315-
const supportsReasoning = modelSupportsReasoning(composerModel);
316-
const updatedTask = await runTaskInCloud(taskId, {
317-
resumeFromRunId: task.latest_run?.id,
318-
pendingUserMessage,
319-
runtimeAdapter: "claude",
320-
model: composerModel,
321-
reasoningEffort: supportsReasoning ? composerReasoning : undefined,
322-
initialPermissionMode: composerMode,
323-
rtkEnabled: usePreferencesStore.getState().rtkEnabledCloud,
324-
});
314+
const supportsReasoning =
315+
getReasoningEffortOptions("claude", composerModel) !== null;
316+
const updatedTask = await getPostHogApiClient().runTaskInCloud(
317+
taskId,
318+
undefined,
319+
{
320+
resumeFromRunId: task.latest_run?.id,
321+
pendingUserMessage,
322+
adapter: "claude",
323+
model: composerModel,
324+
reasoningLevel: supportsReasoning ? composerReasoning : undefined,
325+
initialPermissionMode: composerMode,
326+
rtkEnabled: usePreferencesStore.getState().rtkEnabledCloud,
327+
},
328+
);
325329
setTask(updatedTask);
326330
await connectToTask(updatedTask);
327331
updateTaskInCache(updatedTask);
@@ -506,7 +510,7 @@ export default function TaskDetailScreen() {
506510
);
507511

508512
const handleReasoningChange = useCallback(
509-
(value: ReasoningEffort) => {
513+
(value: SupportedReasoningEffort) => {
510514
if (!taskId) return;
511515
setComposerConfig(taskId, { reasoning: value });
512516
setConfigOption(taskId, "effort", value).catch(() => {});
@@ -559,10 +563,14 @@ export default function TaskDetailScreen() {
559563
setRetrying(true);
560564
disconnectFromTask(taskId);
561565

562-
const updatedTask = await runTaskInCloud(taskId, {
563-
resumeFromRunId: task.latest_run?.id,
564-
rtkEnabled: usePreferencesStore.getState().rtkEnabledCloud,
565-
});
566+
const updatedTask = await getPostHogApiClient().runTaskInCloud(
567+
taskId,
568+
undefined,
569+
{
570+
resumeFromRunId: task.latest_run?.id,
571+
rtkEnabled: usePreferencesStore.getState().rtkEnabledCloud,
572+
},
573+
);
566574
setTask(updatedTask);
567575
await connectToTask(updatedTask);
568576
updateTaskInCache(updatedTask);

0 commit comments

Comments
 (0)