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

Commit f2fe45d

Browse files
refactor(mobile): adopt shared MCP and composer policies
Generated-By: PostHog Code Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
1 parent 26ddcae commit f2fe45d

13 files changed

Lines changed: 235 additions & 535 deletions

File tree

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

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
DEFAULT_CLAUDE_EXECUTION_MODE,
44
getAvailableModes,
55
} from "@posthog/core/sessions/executionModes";
6+
import { resolveCloudComposerModelChange } from "@posthog/core/task-detail/composerModelPolicy";
67
import {
78
DEFAULT_GATEWAY_MODEL,
89
DEFAULT_REASONING_EFFORT,
@@ -56,10 +57,10 @@ import {
5657
import type { PendingAttachment } from "@/features/tasks/composer/attachments/types";
5758
import { DotBackground } from "@/features/tasks/composer/DotBackground";
5859
import {
59-
getMobileModelOptions,
60+
getComposerModelOptions,
61+
getConfigOptionLabel,
62+
getMobileExecutionModes,
6063
getModelConfigOption,
61-
getModelLabel,
62-
resolveAvailableModel,
6364
} from "@/features/tasks/composer/options";
6465
import { Pill } from "@/features/tasks/composer/Pill";
6566
import { RepositoryPickerInline } from "@/features/tasks/composer/RepositoryPickerInline";
@@ -88,7 +89,7 @@ import { getPostHogApiClient } from "@/lib/posthogApiClient";
8889
import { toRgba, useThemeColors } from "@/lib/theme";
8990

9091
const log = logger.scope("task-create");
91-
const EXECUTION_MODES = getAvailableModes();
92+
const EXECUTION_MODES = getMobileExecutionModes(getAvailableModes());
9293

9394
const SUGGESTIONS = [
9495
"Create or update my CLAUDE.md file",
@@ -129,9 +130,10 @@ export default function NewTaskScreen() {
129130
const { insets, bottom } = useScreenInsets();
130131
const keyboard = useReanimatedKeyboardAnimation();
131132
const restingBottom = bottom("compact");
132-
const { configOptions, hasLiveConfig } = useCloudTaskConfigOptions("claude");
133+
const { configOptions, hasLiveConfig, isConfigReady } =
134+
useCloudTaskConfigOptions("claude");
133135
const modelConfigOption = getModelConfigOption(configOptions);
134-
const mobileModelOptions = getMobileModelOptions(modelConfigOption);
136+
const mobileModelOptions = getComposerModelOptions(modelConfigOption);
135137
const {
136138
error,
137139
hasGithubIntegration,
@@ -214,12 +216,14 @@ export default function NewTaskScreen() {
214216

215217
useEffect(() => {
216218
if (!hasLiveConfig) return;
217-
const availableModel = resolveAvailableModel(modelConfigOption, model);
218-
if (availableModel === model) return;
219-
setModel(availableModel);
220-
if (!isSupportedReasoningEffort("claude", availableModel, reasoning)) {
221-
setReasoning(DEFAULT_REASONING_EFFORT);
222-
}
219+
const next = resolveCloudComposerModelChange({
220+
adapter: "claude",
221+
modelOption: modelConfigOption,
222+
requestedModel: model,
223+
reasoning,
224+
});
225+
if (next.model !== model) setModel(next.model);
226+
if (next.reasoning !== reasoning) setReasoning(next.reasoning);
223227
}, [hasLiveConfig, model, modelConfigOption, reasoning]);
224228
const [creating, setCreating] = useState(false);
225229
const [repoSheetOpen, setRepoSheetOpen] = useState(false);
@@ -411,7 +415,7 @@ export default function NewTaskScreen() {
411415

412416
const hasContent = !!prompt.trim() || attachments.length > 0;
413417
const canSubmit =
414-
hasLiveConfig &&
418+
isConfigReady &&
415419
hasContent &&
416420
isRepositorySelectionComplete(selection) &&
417421
!creating;
@@ -424,7 +428,7 @@ export default function NewTaskScreen() {
424428
useWarmTask({
425429
repository: selection.repository,
426430
githubIntegrationId: selection.integrationId,
427-
composerIsEmpty: !hasContent || !hasLiveConfig,
431+
composerIsEmpty: !hasContent || !isConfigReady,
428432
runtimeAdapter: "claude",
429433
model,
430434
reasoningEffort: showReasoningPill ? reasoning : null,
@@ -649,7 +653,12 @@ export default function NewTaskScreen() {
649653

650654
<Pill
651655
icon={<Robot size={14} color={themeColors.gray[11]} />}
652-
label={getModelLabel(modelConfigOption, model)}
656+
label={
657+
getConfigOptionLabel(
658+
modelConfigOption.options,
659+
model,
660+
) ?? model
661+
}
653662
onPress={() => setModelSheetOpen(true)}
654663
/>
655664

@@ -769,10 +778,14 @@ export default function NewTaskScreen() {
769778
title="Model"
770779
value={model}
771780
onChange={(value) => {
772-
setModel(value);
773-
if (!isSupportedReasoningEffort("claude", value, reasoning)) {
774-
setReasoning(DEFAULT_REASONING_EFFORT);
775-
}
781+
const next = resolveCloudComposerModelChange({
782+
adapter: "claude",
783+
modelOption: modelConfigOption,
784+
requestedModel: value,
785+
reasoning,
786+
});
787+
setModel(next.model);
788+
setReasoning(next.reasoning);
776789
}}
777790
onClose={() => setModelSheetOpen(false)}
778791
options={mobileModelOptions.map((modelOption) => ({

apps/mobile/src/features/mcp/api.ts

Lines changed: 0 additions & 185 deletions
This file was deleted.

0 commit comments

Comments
 (0)