From 1f73a89fc4d5c8b3e188282aeb8173f8f8bf257b Mon Sep 17 00:00:00 2001 From: maria Date: Fri, 11 Sep 2026 21:55:29 -0300 Subject: [PATCH 001/282] fix(models): default to astra medium and fable 5.1 medium (#11347) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> --- apps/server/src/provider/Layers/CodexProvider.ts | 3 ++- apps/server/src/provider/model-manifest.json | 10 +++++----- packages/contracts/src/model.ts | 5 +++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/server/src/provider/Layers/CodexProvider.ts b/apps/server/src/provider/Layers/CodexProvider.ts index 31d02f42c5f4..a0e2b744c2a7 100644 --- a/apps/server/src/provider/Layers/CodexProvider.ts +++ b/apps/server/src/provider/Layers/CodexProvider.ts @@ -146,7 +146,8 @@ export function mapCodexModelCapabilities( model: CodexSchema.V2ModelListResponse__Model, ): ModelCapabilities { const reasoningOptions = model.supportedReasoningEfforts.map(({ reasoningEffort }) => - reasoningEffort === model.defaultReasoningEffort + reasoningEffort === + (codexModelFamily(model.model) === "gpt-6-astra" ? "medium" : model.defaultReasoningEffort) ? { id: reasoningEffort, label: reasoningEffortLabel(reasoningEffort), diff --git a/apps/server/src/provider/model-manifest.json b/apps/server/src/provider/model-manifest.json index bca9f09eee8c..9ea0c0063eb5 100644 --- a/apps/server/src/provider/model-manifest.json +++ b/apps/server/src/provider/model-manifest.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-09-04T19:10:48Z", + "updatedAt": "2026-09-12T00:41:55Z", "currentModels": { "codex": [ "gpt-6-astra", @@ -16,7 +16,7 @@ "providers": { "claudeAgent": { "defaults": { - "chat": "claude-sonnet-5" + "chat": "claude-fable-5-1" }, "profiles": { "fable-5": { @@ -33,12 +33,12 @@ }, { "id": "medium", - "label": "Medium" + "label": "Medium", + "isDefault": true }, { "id": "high", - "label": "High", - "isDefault": true + "label": "High" }, { "id": "xhigh", diff --git a/packages/contracts/src/model.ts b/packages/contracts/src/model.ts index bce1a766bc9b..0882aef51d05 100644 --- a/packages/contracts/src/model.ts +++ b/packages/contracts/src/model.ts @@ -149,7 +149,7 @@ const CURSOR_DRIVER_KIND = ProviderDriverKind.make("cursor"); const GROK_DRIVER_KIND = ProviderDriverKind.make("grok"); const OPENCODE_DRIVER_KIND = ProviderDriverKind.make("opencode"); -export const DEFAULT_MODEL = "gpt-5.6-sol"; +export const DEFAULT_MODEL = "gpt-6-astra"; /** * Codex default-model preference, most preferred first. The provider snapshot @@ -157,6 +157,7 @@ export const DEFAULT_MODEL = "gpt-5.6-sol"; * default; when none are available, Codex's own `isDefault` flag wins. */ export const PREFERRED_DEFAULT_CODEX_MODELS: ReadonlyArray = [ + DEFAULT_MODEL, "gpt-5.6-sol", "gpt-5.6-terra", ]; @@ -167,7 +168,7 @@ export const DEFAULT_TEXT_GENERATION_REASONING_EFFORT = "low"; export const DEFAULT_MODEL_BY_PROVIDER: Partial> = { [CODEX_DRIVER_KIND]: DEFAULT_MODEL, - [CLAUDE_DRIVER_KIND]: "claude-sonnet-5", + [CLAUDE_DRIVER_KIND]: "claude-fable-5-1", [CURSOR_DRIVER_KIND]: "auto", // Product slug, not an ACP model id. The Grok adapter treats it as "the session's current model". [GROK_DRIVER_KIND]: "grok-build", From 4d16e6bc6f0be52c5d44b8864000c70c7825e4f7 Mon Sep 17 00:00:00 2001 From: maria Date: Fri, 11 Sep 2026 21:56:20 -0300 Subject: [PATCH 002/282] fix(web): align provider settings with shared settings rows (#10571) --- .../settings/ProviderInstanceCard.tsx | 192 ++++--- .../settings/ProviderModelsSection.tsx | 27 +- .../settings/ProviderSetupSection.test.tsx | 4 +- .../settings/ProviderSetupSection.tsx | 480 ++++++++++-------- packages/contracts/src/settings.ts | 10 +- 5 files changed, 386 insertions(+), 327 deletions(-) diff --git a/apps/web/src/components/settings/ProviderInstanceCard.tsx b/apps/web/src/components/settings/ProviderInstanceCard.tsx index f1f1fe1a518e..b1e4c646f872 100644 --- a/apps/web/src/components/settings/ProviderInstanceCard.tsx +++ b/apps/web/src/components/settings/ProviderInstanceCard.tsx @@ -252,93 +252,98 @@ function ProviderEnvironmentSection(props: { ]); return ( -
- {rows.map((variable, index) => ( -
- updateVariable(variable.id, { name: name.trim() })} - placeholder="VARIABLE_NAME" - spellCheck={false} - aria-label={`Environment variable name ${index + 1}`} - /> - - = - - updateVariable(variable.id, { value })} - type={variable.sensitive ? "password" : undefined} - autoComplete="off" - placeholder={ - variable.valueRedacted ? "Stored secret, enter a new value to replace" : "value" - } - spellCheck={false} - aria-label={`Environment variable value ${index + 1}`} - /> - - { - const sensitive = !variable.sensitive; - updateVariable(variable.id, { - sensitive, - ...(sensitive && variable.valueRedacted === undefined - ? {} - : { valueRedacted: sensitive ? variable.valueRedacted : false }), - }); - }} - aria-pressed={variable.sensitive} - aria-label={`Mark environment variable ${variable.name || index + 1} as sensitive`} - > - {variable.sensitive ? ( - - ) : ( - - )} - - } - /> - - {variable.sensitive ? "Sensitive, stored separately" : "Plain text"} - - - -
- ))} -
- {rows.length > 0 ? ( - - Sensitive values are stored separately and never returned to the app. - - ) : null} - -
-
+ } + > + {rows.length > 0 ? ( +
+ {rows.map((variable, index) => ( +
+ updateVariable(variable.id, { name: name.trim() })} + placeholder="VARIABLE_NAME" + spellCheck={false} + aria-label={`Environment variable name ${index + 1}`} + /> + + = + + updateVariable(variable.id, { value })} + type={variable.sensitive ? "password" : undefined} + autoComplete="off" + placeholder={ + variable.valueRedacted ? "Stored secret, enter a new value to replace" : "value" + } + spellCheck={false} + aria-label={`Environment variable value ${index + 1}`} + /> + + { + const sensitive = !variable.sensitive; + updateVariable(variable.id, { + sensitive, + ...(sensitive && variable.valueRedacted === undefined + ? {} + : { valueRedacted: sensitive ? variable.valueRedacted : false }), + }); + }} + aria-pressed={variable.sensitive} + aria-label={`Mark environment variable ${variable.name || index + 1} as sensitive`} + > + {variable.sensitive ? ( + + ) : ( + + )} + + } + /> + + {variable.sensitive ? "Sensitive, stored separately" : "Plain text"} + + + +
+ ))} +

+ Sensitive values are stored separately and never returned to the app. +

+
+ ) : null} + ); } @@ -837,11 +842,7 @@ export function ProviderInstanceCard({ /> - {setup ? ( - -
{setup}
-
- ) : null} + {setup ? {setup} : null} - - - + {driverOption !== undefined ? ( diff --git a/apps/web/src/components/settings/ProviderModelsSection.tsx b/apps/web/src/components/settings/ProviderModelsSection.tsx index 505a86ff0eac..0cc88eb06384 100644 --- a/apps/web/src/components/settings/ProviderModelsSection.tsx +++ b/apps/web/src/components/settings/ProviderModelsSection.tsx @@ -514,7 +514,7 @@ export function ProviderModelsSection({ onChange={(event) => setFilter(event.target.value)} placeholder="Filter models" size="sm" - className="w-56" + className="w-56 max-w-full" spellCheck={false} aria-label="Filter models" /> @@ -540,6 +540,18 @@ export function ProviderModelsSection({ {hiddenCount > 0 ? ` · ${hiddenCount} hidden` : ""} + {driverKind !== "antigravity" && !isAdding ? ( + + ) : null}
- ) : ( - - )} + ) : null} {driverKind !== "antigravity" && error ? (

{error}

diff --git a/apps/web/src/components/settings/ProviderSetupSection.test.tsx b/apps/web/src/components/settings/ProviderSetupSection.test.tsx index 7e4c2695821a..501b6c8dc496 100644 --- a/apps/web/src/components/settings/ProviderSetupSection.test.tsx +++ b/apps/web/src/components/settings/ProviderSetupSection.test.tsx @@ -138,7 +138,9 @@ function renderSetup( function button(view: unknown, label: string) { return visitElements( view, - (element) => element.props.children === label && typeof element.props.onClick === "function", + (element) => + (element.props.children === label || element.props["aria-label"] === label) && + typeof element.props.onClick === "function", ); } diff --git a/apps/web/src/components/settings/ProviderSetupSection.tsx b/apps/web/src/components/settings/ProviderSetupSection.tsx index 49ad14cddd92..0bbd160b4593 100644 --- a/apps/web/src/components/settings/ProviderSetupSection.tsx +++ b/apps/web/src/components/settings/ProviderSetupSection.tsx @@ -12,6 +12,7 @@ import { type ServerProvider, } from "@t3tools/contracts"; import { useRef, useState } from "react"; +import { Trash2Icon } from "lucide-react"; import { writeTextToClipboard } from "../../hooks/useCopyToClipboard"; import { ensureLocalApi } from "../../localApi"; @@ -20,6 +21,8 @@ import { serverEnvironment } from "../../state/server"; import { useAtomCommand } from "../../state/use-atom-command"; import { Button } from "../ui/button"; import { Input } from "../ui/input"; +import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip"; +import { SettingsRow } from "./settingsLayout"; interface ProviderSetupSectionProps { readonly environmentId: EnvironmentId; @@ -68,24 +71,34 @@ export function readAntigravityAuthMethod(config: unknown): AntigravityAuthMetho /** Setup state belongs to the selected environment and is never saved in client settings. */ export function ProviderSetupSection(props: ProviderSetupSectionProps) { return ( -
-

Antigravity runs on {props.environmentLabel}.

- {!props.enabled ? ( -
- Enable it to use it in threads. - {!props.readOnly ? ( - - ) : null} -
- ) : null} +
+ + + {props.environmentLabel} + + {!props.enabled && !props.readOnly ? ( + + ) : null} + + } + /> {props.readOnly ? ( -

This connection cannot change provider setup.

+ ) : props.provider?.setup === undefined ? ( -

- Update this environment to install Antigravity and sign in with Google here. -

+ ) : ( ( label: string, @@ -262,210 +277,257 @@ function ProviderSetupActions({ } return ( -
-
-

Runtime

-

- {installationStatusMessage} -

- {installation?.phase === "downloading" && - installation.totalBytes !== null && - installation.totalBytes > 0 ? ( - - ) : null} - {installation?.message && installation.message !== installationStatusMessage ? ( -

{installation.message}

- ) : null} - {usesCustomBinary ? ( -

- This instance uses the binary path below. Installing a managed runtime does not change - that path. -

- ) : null} - {!installed && !usesCustomBinary && !installActive && installation?.totalBytes ? ( -

- Downloads {Math.ceil(installation.totalBytes / 1_000_000)} MB from Google. -

- ) : null} - {!installed && !provider.setup?.canInstall ? ( -

- Automatic installation is unavailable here. Set an existing binary path below or use a - supported remote environment. -

- ) : null} -
- {installActive && installation.operationId ? ( - - ) : !installActive && provider.setup?.canInstall ? ( - - ) : null} - {installation?.canRemove && !installActive ? ( - - ) : null} -
-
+
+ + {usesCustomBinary ? ( +

+ Uses the custom binary path below. Installation keeps that path. +

+ ) : null} + {!installed && !provider.setup?.canInstall ? ( +

+ Automatic installation unavailable. Set a binary path or use another environment. +

+ ) : null} +
+ } + control={ +
+

+ {installationStatusMessage} +

+
+ {installation?.phase === "downloading" && + installation.totalBytes !== null && + installation.totalBytes > 0 ? ( + + ) : null} +
+ {!installActive && + installation?.message && + installation.message !== installationStatusMessage ? ( +

+ {installation.message} +

+ ) : null} +
+
+ {installActive && installation.operationId ? ( + + ) : !installActive && provider.setup?.canInstall ? ( + + ) : null} +
+ {installation?.canRemove && !installActive ? ( + + void removeRuntime()} + /> + } + > + + + Remove downloaded runtime + + ) : null} +
+
+ } + /> -
-

{methodLabel}

-

- {authStatusMessage} -

- {authorizationUrl ? ( - <> -
- - + +

+ {authStatusMessage} +

+ {authorizationUrl ? ( +
+ + +
+ ) : null} +
+ {authActive && auth?.flowId ? ( + + ) : !authActive && !authenticated && provider.setup?.canAuthenticate ? ( + + ) : null} + {!authActive && provider.setup?.canAuthenticate ? ( + + ) : null}
- {auth?.expiresAt ? ( +
+ } + > + {authorizationUrl || auth?.phase === "waiting" ? ( +
+ {authorizationUrl ? ( + <> + {auth?.expiresAt ? ( +

+ Link expires at{" "} + + . +

+ ) : null} +
{ + event.preventDefault(); + void submitCallback(); + }} + > + + + setCallbackDraft({ flowId: auth?.flowId ?? null, value: event.target.value }) + } + /> + +
+ + ) : auth?.phase === "waiting" ? (

- Link expires at{" "} - - . + Sign-in is open in another client. Complete or cancel it there.

) : null} -
{ - event.preventDefault(); - void submitCallback(); - }} - > - - - setCallbackDraft({ flowId: auth?.flowId ?? null, value: event.target.value }) - } - /> - -
- - ) : auth?.phase === "waiting" ? ( -

- Sign-in is open in another client. Complete or cancel it there. -

+
) : null} -
- {authActive && auth?.flowId ? ( - - ) : !authActive && !authenticated && provider.setup?.canAuthenticate ? ( - - ) : null} - {!authActive && provider.setup?.canAuthenticate ? ( - - ) : null} -
-
+ - {pendingLabel ?

{pendingLabel}.

: null} +

+ {pendingLabel ? `${pendingLabel}.` : null} +

{error || queryError ? ( -
+

{error ?? queryError}

{queryError ? (