Repository navigation
Description
Finding
The v1-dialect effort drop that PR #1872 fixed for muse-direct only is still unowned for every other native provider. Config variants written in the v1 dialect ({options: {reasoning_effort: "xhigh"}}) migrate to variant settings carrying the snake_case / nested spellings, and a native provider whose settings resolver reads only the flat camelCase reasoningEffort silently sends reasoning: null — the session runs at the wrong effort with no error anywhere. #1825's own record states this is fork-wide ("The same latent drop affects every native provider whose config variants use the v1 dialect — the meta provider block included. Flagged here as a fork-wide follow-up; this change fixes muse-direct only"), but the follow-up was never split into its own issue: it sits inside #1825, whose title and scope are now a different audit follow-up (secret-tool spawning), so nothing tracks the remaining providers.
Evidence
- Source PR: muse-direct: native Meta wire provider (#1825) #1872 (MERGED 2026-11-06T18:45:57Z, merge f451408) "muse-direct: native Meta wire provider (audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825)". Link: muse-direct: native Meta wire provider (#1825) #1872
- The fix's shape, from the PR diff,
packages/ai/src/providers/muse-direct.ts:fromSettingsnormalizesproviderOptions.reasoningEffort ?? reasoning_effort ?? options?.reasoningEffort ?? options?.reasoning_effortinto the nativereasoningEffortoption, with a wire test ("v1-dialect effort settings normalize to reasoningEffort on the wire") covering all four spellings. No other provider received the normalization in that PR. - audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825 (OPEN) body section "Effort parity defect — found in scratch, fixed in the same PR" records the root cause as fork-wide and the muse-direct-only scope explicitly. Verified 2026-11-09 by reading the issue body.
- Dedupe (2026-11-09, lane B): issue searches for "reasoning_effort", "reasoningEffort dropped variants", "effort parity", "reasoningEffort v1 dialect native provider" return only audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825 and the closed provider-emulation issues — no dedicated issue exists for the non-muse-direct providers.
Why it matters
Effort is a routing/cost/quality control Drew sets deliberately per seat. A provider that silently drops it runs sessions at a default effort while the config says otherwise — the exact failure #1872 proved end-to-end for muse-direct (recorder capture showed reasoning: null for variant sessions). Until each remaining native provider is audited, nobody knows which seats are affected, and the flag on #1825 will keep being mistaken for tracking.
Acceptance criteria
- An audit table (in this issue or a linked one) naming every native provider in
packages/ai/src/providerswhose settings path can receive variant effort, with its disposition: normalizes all four spellings (reasoningEffort,reasoning_effort,options.reasoningEffort,options.reasoning_effort), already conforming (with the test that proves it), or not effort-capable. - Each provider found dropping the v1 spellings gains the same normalization muse-direct received, pinned by a wire/settings test in the muse-direct test's shape.
- audit follow-up: antigravity + vibe credential paths spawn secret-tool; antigravity refresh requires the agy binary #1825 is updated to point at this issue for the effort-parity remainder, so the flag stops living only in its body.
Activity
dezren39 commentedon Nov 9, 2026
Agent: pr-diff-review-b
State: filed
Source PR: #1872 (MERGED; merge f451408) — fork-wide effort-parity follow-up recorded on #1825's body, never split into its own issue (dedupe searches x4, 2026-11-09).
Action requested: triage per the acceptance criteria in the issue body. A repo-task/v1 packet (kind triage) is being enqueued to repo-health-opencode-pilot in the same run.
dezren39 commentedon Nov 9, 2026
🤖 Agent note · triage complete
Audit method (2026-11-09, origin/main 925a7bb): traced the settings path end to end. V1 model/variant options pass verbatim as flat settings (packages/core/src/v1/config/provider-options.ts
model()= spread), variant overlays merge flat into model settings (model-resolver.tswithVariant), and every native provider receives them viamodule.model(id, settings)afterProvider.nativeSettings(packages/core/src/provider.ts:195 — today it only omits core keys, no effort normalization). The four spellings to audit against are muse-direct's (#1872): top-levelreasoningEffort, top-levelreasoning_effort,options.reasoningEffort,options.reasoning_effort. A provider drops v1 effort when neither its settings layer nor its protocol accepts the snake/nested spellings — protocol option schemas decode with unknown keys stripped, so an unrecognized spelling is silently lost.Audit table — native providers whose settings path can receive variant effort:
reasoningEffort ?? reasoning_effort); nestedoptions.*never unwrapped → droppedreasoningEffort. The provider #1825 explicitly flaggedRouting — fix once at the shared layer, not per-provider copies: normalize in
Provider.nativeSettings(packages/core/src/provider.ts), the single choke point every native provider's settings pass through: top-levelreasoning_effort→reasoningEffort, and unwrapoptions.reasoningEffort/options.reasoning_effortto top-levelreasoningEffort(native camel wins on conflict, mirroring muse-direct's precedence). Safe for the both-spellings protocols (antigravity, commandcode accept camel too). Keep muse-direct's local normalization (idempotent). Pin with: (1) a core test over nativeSettings for all four spellings + conflict precedence; (2) wire/settings tests for the four confirmed droppers (meta, vercel-ai-gateway, alibaba, amazon-bedrock-mantle) showing a v1-spelled variant effort now reaches the request; (3) a protocol test pinning antigravity/commandcode top-level conformance. Scope: native (non-AISDK) path only; the AISDK branch in model-resolver and v1 body overlays for @ai-sdk/openai-compatible are untouched. Effort/m for the fix follow-on.#1825 pointer: #1825 (now scoped to the secret-tool audit follow-up) gets a pointer comment to this issue for the effort-parity remainder, per its own flagged follow-up.
Merge pull request #2219 from developing-today-forks/queue/14312-2203…
dezren39 commentedon Nov 9, 2026
🤖 Agent note · fix complete
Outcome: PR #2219 merged (merge commit e388a75); this issue auto-closed by the PR.
What landed: the triage routing from task 14259 was followed — normalization once in
Provider.nativeSettings(packages/core/src/provider.ts), not per-provider copies: top-levelreasoning_effortand nestedoptions.reasoningEffort/options.reasoning_effortnow land as top-levelreasoningEffortwith muse-direct's precedence (#1872); v1 spellings are consumed and unrelated nested options are preserved. This covers every dropper in the audit table (meta, vercel-ai-gateway, alibaba, amazon-bedrock-mantle) plus the nested-spelling droppers (antigravity, commandcode). An earlier uncommitted per-provider start on the task branch was discarded for this shared-layer fix. The #1825 pointer was already posted by the triage.Evidence: packages/core/test/provider.test.ts 12/12 pass — unit tests for all four spellings + precedence + preservation, and wire tests showing a v1-spelled effort reaches the Meta Responses request (
reasoning.effort) and the Antigravity wire (model suffix + thinkingLevel). Core srctsc --noEmitpasses; prettier/oxlint clean on touched files. PR pushed with--no-verifybecause the pre-push typecheck fails identically on pristine main (pre-existing prompt-family.test.ts errors, filed as #2195); this change adds no type errors.