Skip to content
This repository was archived by the owner on Aug 6, 2026. It is now read-only.

Commit 8a7c6d3

Browse files
refactor(mobile): adopt shared task runtime
Generated-By: PostHog Code Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
1 parent b7411a3 commit 8a7c6d3

75 files changed

Lines changed: 854 additions & 3879 deletions

File tree

Some content is hidden

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

‎apps/mobile/package.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"@expo/ui": "0.2.0-beta.9",
2828
"@modelcontextprotocol/ext-apps": "^1.2.2",
2929
"@modelcontextprotocol/sdk": "^1.29.0",
30+
"@posthog/api-client": "workspace:*",
31+
"@posthog/core": "workspace:*",
3032
"@posthog/shared": "workspace:*",
3133
"@react-native-async-storage/async-storage": "^2.2.0",
3234
"@react-native-community/netinfo": "^12.0.1",

‎apps/mobile/src/app/automation/[id].tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Text } from "@components/text";
2+
import { TaskAutomationValidationError } from "@posthog/api-client/posthog-client";
23
import { Stack, useLocalSearchParams, useRouter } from "expo-router";
34
import { useState } from "react";
45
import {
@@ -10,7 +11,6 @@ import {
1011
ScrollView,
1112
View,
1213
} from "react-native";
13-
import { TaskAutomationValidationError } from "@/features/tasks/api";
1414
import { AutomationDetail } from "@/features/tasks/components/AutomationDetail";
1515
import { AutomationForm } from "@/features/tasks/components/AutomationForm";
1616
import {

‎apps/mobile/src/app/automation/create.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { TaskAutomationValidationError } from "@posthog/api-client/posthog-client";
12
import { getCalendars } from "expo-localization";
23
import { Stack, useLocalSearchParams, useRouter } from "expo-router";
34
import { useMemo, useRef, useState } from "react";
@@ -10,7 +11,6 @@ import {
1011
View,
1112
} from "react-native";
1213
import { Text } from "@/components/text";
13-
import { TaskAutomationValidationError } from "@/features/tasks/api";
1414
import { AutomationForm } from "@/features/tasks/components/AutomationForm";
1515
import { useCreateTaskAutomation } from "@/features/tasks/hooks/useAutomations";
1616
import { useSkillStoreSkill } from "@/features/tasks/skills/hooks";

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
import { Text } from "@components/text";
2+
import {
3+
countUserMessages,
4+
getSessionActivityPhase,
5+
} from "@posthog/core/sessions/sessionActivity";
6+
import { isTaskRunning } from "@posthog/core/tasks/taskArchive";
7+
import type { Task } from "@posthog/shared";
28
import { useQueryClient } from "@tanstack/react-query";
39
import * as Haptics from "expo-haptics";
410
import { useLocalSearchParams, useRouter } from "expo-router";
@@ -14,7 +20,7 @@ import { useReanimatedKeyboardAnimation } from "react-native-keyboard-controller
1420
import Animated, { useAnimatedStyle } from "react-native-reanimated";
1521
import { FloatingBackButton } from "@/components/FloatingBackButton";
1622
import { usePreferencesStore } from "@/features/preferences/stores/preferencesStore";
17-
import { getTask, runTaskInCloud } from "@/features/tasks/api";
23+
import { runTaskInCloud } from "@/features/tasks/api";
1824
import { CustomImageBadge } from "@/features/tasks/components/CustomImageBadge";
1925
import { FloatingTaskHeader } from "@/features/tasks/components/FloatingTaskHeader";
2026
import { PrDiffStatsBadge } from "@/features/tasks/components/PrDiffStatsBadge";
@@ -51,22 +57,15 @@ import {
5157
} from "@/features/tasks/stores/pendingTaskPromptStore";
5258
import { useTaskSessionStore } from "@/features/tasks/stores/taskSessionStore";
5359
import { useTaskStore } from "@/features/tasks/stores/taskStore";
54-
import type { Task } from "@/features/tasks/types";
55-
import {
56-
confirmStopRun,
57-
isTaskRunning,
58-
} from "@/features/tasks/utils/archiveGuard";
59-
import {
60-
countUserMessages,
61-
getSessionActivityPhase,
62-
} from "@/features/tasks/utils/sessionActivity";
60+
import { confirmStopRun } from "@/features/tasks/utils/archiveGuard";
6361
import { useScreenInsets } from "@/hooks/useScreenInsets";
6462
import {
6563
ANALYTICS_EVENTS,
6664
useActiveTaskAnalyticsContext,
6765
useAnalytics,
6866
} from "@/lib/analytics";
6967
import { logger } from "@/lib/logger";
68+
import { getPostHogApiClient } from "@/lib/posthogApiClient";
7069
import { useThemeColors } from "@/lib/theme";
7170

7271
const log = logger.scope("task-detail");
@@ -221,7 +220,8 @@ export default function TaskDetailScreen() {
221220
setLoading(true);
222221
setError(null);
223222

224-
getTask(taskId)
223+
getPostHogApiClient()
224+
.getTask(taskId)
225225
.then((fetchedTask) => {
226226
if (cancelled) return;
227227
setTask(fetchedTask);
@@ -252,7 +252,8 @@ export default function TaskDetailScreen() {
252252
if (retrying) return;
253253

254254
let cancelled = false;
255-
getTask(taskId)
255+
getPostHogApiClient()
256+
.getTask(taskId)
256257
.then((freshTask) => {
257258
if (cancelled) return;
258259
setTask(freshTask);

‎apps/mobile/src/app/task/index.tsx‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
import Animated, { runOnJS, useAnimatedStyle } from "react-native-reanimated";
3131
import { useVoiceRecording } from "@/features/chat";
3232
import { usePreferencesStore } from "@/features/preferences/stores/preferencesStore";
33-
import { createTask, runTaskInCloud } from "@/features/tasks/api";
33+
import { runTaskInCloud } from "@/features/tasks/api";
3434
import { GitHubConnectionPrompt } from "@/features/tasks/components/GitHubConnectionPrompt";
3535
import { GitHubLoadNotice } from "@/features/tasks/components/GitHubLoadNotice";
3636
import { AttachmentSheet } from "@/features/tasks/composer/attachments/AttachmentSheet";
@@ -80,6 +80,7 @@ import {
8080
} from "@/features/tasks/utils/repositorySelection";
8181
import { useScreenInsets } from "@/hooks/useScreenInsets";
8282
import { logger } from "@/lib/logger";
83+
import { getPostHogApiClient } from "@/lib/posthogApiClient";
8384
import { toRgba, useThemeColors } from "@/lib/theme";
8485

8586
const log = logger.scope("task-create");
@@ -308,7 +309,7 @@ export default function NewTaskScreen() {
308309
? `Attached: ${attachments[0].fileName}`
309310
: `Attached ${attachments.length} files`);
310311

311-
const task = await createTask({
312+
const task = await getPostHogApiClient().createTask({
312313
description: descriptionText,
313314
title: descriptionText.slice(0, 100),
314315
repository: selection.repository ?? undefined,

‎apps/mobile/src/features/chat/components/ToolMessage.tsx‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -659,9 +659,12 @@ function CreateTaskPreview({
659659

660660
try {
661661
// Dynamic import to avoid circular dependency
662-
const { createTask, runTaskInCloud } = await import("../../tasks/api");
662+
const [{ runTaskInCloud }, { getPostHogApiClient }] = await Promise.all([
663+
import("../../tasks/api"),
664+
import("@/lib/posthogApiClient"),
665+
]);
663666

664-
const task = await createTask({
667+
const task = await getPostHogApiClient().createTask({
665668
title: args.title,
666669
description: args.description,
667670
repository: args.repository,

‎apps/mobile/src/features/inbox/api.ts‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { HttpError } from "@/features/tasks/api";
2-
import { authedFetch, getBaseUrl, getProjectId } from "@/lib/api";
1+
import { authedFetch, getBaseUrl, getProjectId, HttpError } from "@/lib/api";
32
import { logger } from "@/lib/logger";
43
import type { DismissalReasonOptionValue } from "./constants";
54

‎apps/mobile/src/features/inbox/components/EditReviewersSheet.tsx‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import { Text } from "@components/text";
2+
import {
3+
buildReviewerOptions,
4+
reviewerMatchesAvailable,
5+
} from "@posthog/core/inbox/artefacts";
26
import { MagnifyingGlass } from "phosphor-react-native";
37
import { useMemo, useState } from "react";
48
import {
@@ -14,7 +18,6 @@ import { useScreenInsets } from "@/hooks/useScreenInsets";
1418
import { useThemeColors } from "@/lib/theme";
1519
import { useAvailableSuggestedReviewers } from "../hooks/useInboxReports";
1620
import type { AvailableSuggestedReviewer, SuggestedReviewer } from "../types";
17-
import { buildReviewerOptions, reviewerMatchesAvailable } from "../utils";
1821
import { ReviewerOptionRow } from "./ReviewerOptionRow";
1922

2023
interface EditReviewersSheetProps {

‎apps/mobile/src/features/inbox/components/ReviewerFilterSheet.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Text } from "@components/text";
2+
import { buildReviewerOptions } from "@posthog/core/inbox/artefacts";
23
import { useMemo } from "react";
34
import {
45
ActivityIndicator,
@@ -12,7 +13,6 @@ import { useScreenInsets } from "@/hooks/useScreenInsets";
1213
import { useThemeColors } from "@/lib/theme";
1314
import { useAvailableSuggestedReviewers } from "../hooks/useInboxReports";
1415
import { useInboxFilterStore } from "../stores/inboxFilterStore";
15-
import { buildReviewerOptions } from "../utils";
1616
import { ReviewerOptionRow } from "./ReviewerOptionRow";
1717

1818
interface ReviewerFilterSheetProps {

‎apps/mobile/src/features/inbox/components/ReviewerOptionRow.tsx‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { Text } from "@components/text";
2+
import {
3+
type ReviewerOption,
4+
reviewerOptionLabel,
5+
} from "@posthog/core/inbox/artefacts";
26
import { Check } from "phosphor-react-native";
37
import { Image, Pressable, View } from "react-native";
48
import { useThemeColors } from "@/lib/theme";
5-
import { type ReviewerOption, reviewerOptionLabel } from "../utils";
69

710
interface ReviewerOptionRowProps {
811
reviewer: ReviewerOption;

0 commit comments

Comments
 (0)