authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-03-02 16:42:46-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-03-05 23:00:41-08:00
logfeff86638ef7f08f6766350b8e84b151972eaaa7
tree0d43efc232eaf8a6acfae60ad954a696e6fe6406
parentad28eaa86f851c6cd28573bd76635b550b43a530

Fix effort and provider handling in thread turn start

- Only include `effort` in start command when a value is selected - Persist effort selection via composer draft state and hide picker when unavailable - Add optional `provider` to `ClientThreadTurnStartCommand` - Simplify thread model fallback selection in `ChatView`

2 files changed, 11 insertions(+), 14 deletions(-)

apps/web/src/components/ChatView.tsx+10-14
......@@ -2153,13 +2153,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
21532153 }
21542154 }
21552155 const title = truncateTitle(titleSeed);
2156 let threadCreateModel = selectedModel;
2157 if (!threadCreateModel) {
2158 threadCreateModel = activeProject.model;
2159 }
2160 if (!threadCreateModel) {
2161 threadCreateModel = DEFAULT_MODEL;
2162 }
2156 let threadCreateModel: ModelSlug = selectedModel || (activeProject.model as ModelSlug) || DEFAULT_MODEL;
21632157
21642158 if (isLocalDraftThread) {
21652159 await api.orchestration.dispatchCommand({
......@@ -2228,7 +2222,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
22282222 },
22292223 model: selectedModel || undefined,
22302224 provider: selectedProvider,
2231 ...(supportsReasoningEffort ? { effort: selectedEffort } : {}),
2225 ...(supportsReasoningEffort && selectedEffort ? { effort: selectedEffort } : {}),
22322226 assistantDeliveryMode: settings.enableAssistantStreaming ? "streaming" : "buffered",
22332227 approvalPolicy,
22342228 sandboxMode,
......@@ -2387,7 +2381,7 @@ export default function ChatView({ threadId }: ChatViewProps) {
23872381 );
23882382 const onEffortSelect = useCallback(
23892383 (effort: CodexReasoningEffort) => {
2390 setSelectedEffort(effort);
2384 setComposerDraftEffort(threadId, effort);
23912385 scheduleComposerFocus();
23922386 },
23932387 [scheduleComposerFocus, setComposerDraftEffort, threadId],
......@@ -2850,11 +2844,13 @@ export default function ChatView({ threadId }: ChatViewProps) {
28502844 <Separator orientation="vertical" className="mx-0.5 hidden h-4 sm:block" />
28512845
28522846 {/* Reasoning effort */}
2853 <ReasoningEffortPicker
2854 effort={selectedEffort}
2855 options={reasoningOptions}
2856 onEffortChange={onEffortSelect}
2857 />
2847 {selectedEffort != null && (
2848 <ReasoningEffortPicker
2849 effort={selectedEffort}
2850 options={reasoningOptions}
2851 onEffortChange={onEffortSelect}
2852 />
2853 )}
28582854 </>
28592855 ) : null}
28602856
packages/contracts/src/orchestration.ts+1
......@@ -348,6 +348,7 @@ export const ClientThreadTurnStartCommand = Schema.Struct({
348348 text: Schema.String,
349349 attachments: Schema.Array(UploadChatAttachment),
350350 }),
351 provider: Schema.optional(ProviderKind),
351352 model: Schema.optional(TrimmedNonEmptyString),
352353 effort: Schema.optional(TrimmedNonEmptyString),
353354 assistantDeliveryMode: Schema.optional(AssistantDeliveryMode),