33 DEFAULT_CLAUDE_EXECUTION_MODE ,
44 getAvailableModes ,
55} from "@posthog/core/sessions/executionModes" ;
6+ import { resolveCloudComposerModelChange } from "@posthog/core/task-detail/composerModelPolicy" ;
67import {
78 DEFAULT_GATEWAY_MODEL ,
89 DEFAULT_REASONING_EFFORT ,
@@ -56,10 +57,10 @@ import {
5657import type { PendingAttachment } from "@/features/tasks/composer/attachments/types" ;
5758import { DotBackground } from "@/features/tasks/composer/DotBackground" ;
5859import {
59- getMobileModelOptions ,
60+ getComposerModelOptions ,
61+ getConfigOptionLabel ,
62+ getMobileExecutionModes ,
6063 getModelConfigOption ,
61- getModelLabel ,
62- resolveAvailableModel ,
6364} from "@/features/tasks/composer/options" ;
6465import { Pill } from "@/features/tasks/composer/Pill" ;
6566import { RepositoryPickerInline } from "@/features/tasks/composer/RepositoryPickerInline" ;
@@ -88,7 +89,7 @@ import { getPostHogApiClient } from "@/lib/posthogApiClient";
8889import { toRgba , useThemeColors } from "@/lib/theme" ;
8990
9091const log = logger . scope ( "task-create" ) ;
91- const EXECUTION_MODES = getAvailableModes ( ) ;
92+ const EXECUTION_MODES = getMobileExecutionModes ( getAvailableModes ( ) ) ;
9293
9394const 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 ) => ( {
0 commit comments