authorgravatar for 78751023+delltrak@users.noreply.github.comdelltrak <78751023+delltrak@users.noreply.github.com> 2026-08-15 09:27:01-03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-08-15 12:27:01+00:00
log39167eb1a586ee9e060d6ec3314617e14e0259c0
tree30feaa889d4930038003fbc6d9ba5bcefec4aaea
parent7ce4194707e2a883ccd6a44fd2e07eba08f5369a
signature Signed by PGP key B5690EEEBB952194

fix(web): describe what Ultracode does in the Reasoning picker (#6092)


3 files changed, 43 insertions(+), 18 deletions(-)

apps/server/src/provider/Layers/ClaudeProvider.ts+15-3
...@@ -78,7 +78,11 @@ const CLAUDE_MODEL_CATALOG: ReadonlyArray<ServerProviderModel> = [...@@ -78,7 +78,11 @@ const CLAUDE_MODEL_CATALOG: ReadonlyArray<ServerProviderModel> = [
78 { value: "high", label: "High", isDefault: true },78 { value: "high", label: "High", isDefault: true },
79 { value: "xhigh", label: "Extra High" },79 { value: "xhigh", label: "Extra High" },
80 { value: "max", label: "Max" },80 { value: "max", label: "Max" },
81 { value: "ultracode", label: "Ultracode" },81 {
82 value: "ultracode",
83 label: "Ultracode",
84 description: "xhigh effort plus multi-agent workflow orchestration",
85 },
82 { value: "ultrathink", label: "Ultrathink" },86 { value: "ultrathink", label: "Ultrathink" },
83 ],87 ],
84 promptInjectedValues: ["ultrathink"],88 promptInjectedValues: ["ultrathink"],
...@@ -109,7 +113,11 @@ const CLAUDE_MODEL_CATALOG: ReadonlyArray<ServerProviderModel> = [...@@ -109,7 +113,11 @@ const CLAUDE_MODEL_CATALOG: ReadonlyArray<ServerProviderModel> = [
109 { value: "high", label: "High", isDefault: true },113 { value: "high", label: "High", isDefault: true },
110 { value: "xhigh", label: "Extra High" },114 { value: "xhigh", label: "Extra High" },
111 { value: "max", label: "Max" },115 { value: "max", label: "Max" },
112 { value: "ultracode", label: "Ultracode" },116 {
117 value: "ultracode",
118 label: "Ultracode",
119 description: "xhigh effort plus multi-agent workflow orchestration",
120 },
113 { value: "ultrathink", label: "Ultrathink" },121 { value: "ultrathink", label: "Ultrathink" },
114 ],122 ],
115 promptInjectedValues: ["ultrathink"],123 promptInjectedValues: ["ultrathink"],
...@@ -145,7 +153,11 @@ const CLAUDE_MODEL_CATALOG: ReadonlyArray<ServerProviderModel> = [...@@ -145,7 +153,11 @@ const CLAUDE_MODEL_CATALOG: ReadonlyArray<ServerProviderModel> = [
145 { value: "high", label: "High", isDefault: true },153 { value: "high", label: "High", isDefault: true },
146 { value: "xhigh", label: "Extra High" },154 { value: "xhigh", label: "Extra High" },
147 { value: "max", label: "Max" },155 { value: "max", label: "Max" },
148 { value: "ultracode", label: "Ultracode" },156 {
157 value: "ultracode",
158 label: "Ultracode",
159 description: "xhigh effort plus multi-agent workflow orchestration",
160 },
149 { value: "ultrathink", label: "Ultrathink" },161 { value: "ultrathink", label: "Ultrathink" },
150 ],162 ],
151 promptInjectedValues: ["ultrathink"],163 promptInjectedValues: ["ultrathink"],
apps/server/src/provider/providerSnapshot.ts+12-6
...@@ -168,16 +168,22 @@ export function buildSelectOptionDescriptor(input: {...@@ -168,16 +168,22 @@ export function buildSelectOptionDescriptor(input: {
168 readonly id: string;168 readonly id: string;
169 readonly label: string;169 readonly label: string;
170 readonly options:170 readonly options:
171 | ReadonlyArray<{ value: string; label: string; isDefault?: boolean | undefined }>171 | ReadonlyArray<{
172 value: string;
173 label: string;
174 description?: string | undefined;
175 isDefault?: boolean | undefined;
176 }>
172 | undefined;177 | undefined;
173 readonly description?: string;178 readonly description?: string;
174 readonly promptInjectedValues?: ReadonlyArray<string>;179 readonly promptInjectedValues?: ReadonlyArray<string>;
175}) {180}) {
176 const options = (input.options ?? []).map((option) =>181 const options = (input.options ?? []).map((option) => ({
177 option.isDefault182 id: option.value,
178 ? { id: option.value, label: option.label, isDefault: true }183 label: option.label,
179 : { id: option.value, label: option.label },184 ...(option.description ? { description: option.description } : {}),
180 );185 ...(option.isDefault ? { isDefault: true } : {}),
186 }));
181 const currentValue = options.find((option) => option.isDefault)?.id;187 const currentValue = options.find((option) => option.isDefault)?.id;
182 return {188 return {
183 id: input.id,189 id: input.id,
apps/web/src/components/chat/TraitsPicker.tsx+16-9
...@@ -328,16 +328,23 @@ export const TraitsMenuContent = memo(function TraitsMenuContentImpl({...@@ -328,16 +328,23 @@ export const TraitsMenuContent = memo(function TraitsMenuContentImpl({
328 closeOnClick328 closeOnClick
329 disabled={ultrathinkInBodyText && descriptor.id === primarySelectDescriptor?.id}329 disabled={ultrathinkInBodyText && descriptor.id === primarySelectDescriptor?.id}
330 >330 >
331 <span className="flex w-full min-w-0 items-center justify-between gap-3">331 <span className="flex w-full min-w-0 flex-col">
332 <span className="min-w-0 truncate">332 <span className="flex w-full min-w-0 items-center justify-between gap-3">
333 {option.label}333 <span className="min-w-0 truncate">
334 {option.isDefault ? (334 {option.label}
335 <>335 {option.isDefault ? (
336 {" "}336 <>
337 <DefaultBadge />337 {" "}
338 </>338 <DefaultBadge />
339 ) : null}339 </>
340 ) : null}
341 </span>
340 </span>342 </span>
343 {option.description ? (
344 <span className="max-w-56 text-pretty text-muted-foreground/80 text-xs">
345 {option.description}
346 </span>
347 ) : null}
341 </span>348 </span>
342 </MenuRadioItem>349 </MenuRadioItem>
343 ))}350 ))}