Skip to content

fix: expose qwen3.6-plus on Coding Plan endpoints#66367

Closed
lilesjtu wants to merge 1 commit into
openclaw:mainfrom
lilesjtu:fix/qwen-36-plus-coding-plan
Closed

fix: expose qwen3.6-plus on Coding Plan endpoints#66367
lilesjtu wants to merge 1 commit into
openclaw:mainfrom
lilesjtu:fix/qwen-36-plus-coding-plan

Conversation

@lilesjtu

@lilesjtu lilesjtu commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Summary

This change removes OpenClaw-side filtering that hides qwen3.6-plus when the configured Qwen base URL points at Alibaba's Coding Plan endpoints.

Why

Alibaba Cloud Coding Plan now supports qwen3.6-plus for all Coding Plan Pro users, so OpenClaw should not hard-block the model before the upstream provider responds.

The current Qwen integration blocks qwen3.6-plus in two places:

  • dynamic catalog filtering in buildQwenModelCatalogForBaseUrl(...)
  • config-time filtering in normalizeConfig

That means OpenClaw can reject a model that Coding Plan Pro users are already allowed to use.

Without this change, OpenClaw hides qwen3.6-plus from the Qwen catalog and strips it from provider config on Coding Plan endpoints, so Coding Plan Pro users cannot select or use a model they already have access to.

Changes

  • remove Coding Plan-specific qwen3.6-plus filtering from the Qwen catalog
  • stop stripping qwen3.6-plus in plugin config normalization
  • update tests and docs to match the new behavior

Notes

This change prefers provider truth over OpenClaw-side preemption.

If the upstream provider ever returns an unsupported-model error for a specific account or plan, that error should come from the provider directly rather than from OpenClaw hard-blocking the model in advance.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation size: XS labels Apr 14, 2026
@greptile-apps

greptile-apps Bot commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Removes the three places in the Qwen plugin that hard-blocked qwen3.6-plus on Coding Plan endpoints (buildQwenModelCatalogForBaseUrl filter, normalizeConfig model strip, and suppressBuiltInModel error return), and updates docs and tests accordingly. The approach is sound — letting the upstream provider surface unsupported-model errors is preferable to OpenClaw pre-emptively blocking a model that some tenants can already use.

Confidence Score: 5/5

  • Safe to merge; all remaining findings are minor cleanup suggestions with no impact on correctness.
  • No P0 or P1 issues. The two P2 findings are a dead stub function (isQwen36PlusUnsupportedForConfig) with an unreachable branch in suppressBuiltInModel, and Coding Plan noteMessage arrays that don't yet mention qwen3.6-plus. Neither blocks the intended behavior.
  • extensions/qwen/index.ts — dead stub and unreachable return; Coding Plan note messages

Comments Outside Diff (1)

  1. extensions/qwen/index.ts, line 118-122 (link)

    P2 Coding Plan note messages omit qwen3.6-plus

    Both Coding Plan auth option noteMessage arrays (China and Global/Intl, lines ~118–122 and ~138–142) list "Models: qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc." but don't mention qwen3.6-plus, even though this PR is specifically exposing it on those endpoints. Users reading the onboarding wizard will see an incomplete model list for Coding Plan.

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: extensions/qwen/index.ts
    Line: 118-122
    
    Comment:
    **Coding Plan note messages omit qwen3.6-plus**
    
    Both Coding Plan auth option `noteMessage` arrays (China and Global/Intl, lines ~118–122 and ~138–142) list `"Models: qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc."` but don't mention `qwen3.6-plus`, even though this PR is specifically exposing it on those endpoints. Users reading the onboarding wizard will see an incomplete model list for Coding Plan.
    
    How can I resolve this? If you propose a fix, please make it concise.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: extensions/qwen/index.ts
Line: 42-180

Comment:
**Dead stub and unreachable branch**

`isQwen36PlusUnsupportedForConfig` always returns `false`, so `!isQwen36PlusUnsupportedForConfig(...)` is always `true`, which means the `if` in `suppressBuiltInModel` is always entered and the second `return undefined` at line 180 is unreachable. The stub function and the whole conditional can be deleted — the hook can just be `suppressBuiltInModel: () => undefined`.

```suggestion
    suppressBuiltInModel: () => undefined,
```

`isQwen36PlusUnsupportedForConfig` (lines 42–47) should be removed as well since it has no callers after this cleanup.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: extensions/qwen/index.ts
Line: 118-122

Comment:
**Coding Plan note messages omit qwen3.6-plus**

Both Coding Plan auth option `noteMessage` arrays (China and Global/Intl, lines ~118–122 and ~138–142) list `"Models: qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc."` but don't mention `qwen3.6-plus`, even though this PR is specifically exposing it on those endpoints. Users reading the onboarding wizard will see an incomplete model list for Coding Plan.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "qwen: expose qwen3.6-plus on coding plan..." | Re-trigger Greptile

Comment thread extensions/qwen/index.ts Outdated
Comment on lines +42 to +180
@@ -165,14 +165,8 @@ export default defineSingleProviderPluginEntry({
},
applyNativeStreamingUsageCompat: ({ providerConfig }) =>
applyQwenNativeStreamingUsageCompat(providerConfig),
normalizeConfig: ({ providerConfig }) => {
if (!isQwenCodingPlanBaseUrl(providerConfig.baseUrl)) {
return undefined;
}
const models = providerConfig.models?.filter((model) => model.id !== QWEN_36_PLUS_MODEL_ID);
return models && models.length !== providerConfig.models?.length
? { ...providerConfig, models }
: undefined;
normalizeConfig: () => {
return undefined;
},
suppressBuiltInModel: (ctx) => {
const provider = normalizeProviderId(ctx.provider);
@@ -183,11 +177,7 @@ export default defineSingleProviderPluginEntry({
) {
return undefined;
}
return {
suppress: true,
errorMessage:
"Unknown model: qwen/qwen3.6-plus. qwen3.6-plus is not supported on the Qwen Coding Plan endpoint; use a Standard pay-as-you-go Qwen endpoint or choose qwen/qwen3.5-plus.",
};
return undefined;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Dead stub and unreachable branch

isQwen36PlusUnsupportedForConfig always returns false, so !isQwen36PlusUnsupportedForConfig(...) is always true, which means the if in suppressBuiltInModel is always entered and the second return undefined at line 180 is unreachable. The stub function and the whole conditional can be deleted — the hook can just be suppressBuiltInModel: () => undefined.

Suggested change
suppressBuiltInModel: () => undefined,

isQwen36PlusUnsupportedForConfig (lines 42–47) should be removed as well since it has no callers after this cleanup.

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/qwen/index.ts
Line: 42-180

Comment:
**Dead stub and unreachable branch**

`isQwen36PlusUnsupportedForConfig` always returns `false`, so `!isQwen36PlusUnsupportedForConfig(...)` is always `true`, which means the `if` in `suppressBuiltInModel` is always entered and the second `return undefined` at line 180 is unreachable. The stub function and the whole conditional can be deleted — the hook can just be `suppressBuiltInModel: () => undefined`.

```suggestion
    suppressBuiltInModel: () => undefined,
```

`isQwen36PlusUnsupportedForConfig` (lines 42–47) should be removed as well since it has no callers after this cleanup.

How can I resolve this? If you propose a fix, please make it concise.

@lilesjtu lilesjtu changed the title qwen: expose qwen3.6-plus on Coding Plan endpoints fix: expose qwen3.6-plus on Coding Plan endpoints Apr 14, 2026
@lilesjtu

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown
Contributor

Codex Review: Didn't find any major issues. You're on a roll.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@clawsweeper

clawsweeper Bot commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

Codex review: keeping this open for maintainer follow-up; there is still a little grit to resolve.

Keep this PR open. Current main still does not implement the broad behavior this PR proposes: qwen3.6-plus is still filtered from Qwen Coding Plan catalogs, stripped from Coding Plan provider config, suppressed through manifest metadata, and documented/tested as Standard-endpoint-only. The related maintainer PR #72664 is open and intentionally narrower, so it is not a merged or accepted replacement yet.

Best possible solution:

Keep this PR open for maintainer product and security review. If maintainers want the broader provider-truth behavior, rebase or land an equivalent patch that removes Coding Plan filtering from extensions/qwen/models.ts, extensions/qwen/index.ts, and the manifest suppression in extensions/qwen/openclaw.plugin.json, then update Qwen tests and docs. If maintainers choose #72664's narrower explicit-config policy as canonical, close this PR only after that policy lands or is explicitly accepted as the replacement.

What I checked:

Remaining risk / open question:

  • The latest PR file list does not include extensions/qwen/openclaw.plugin.json, while current main now carries Coding Plan qwen3.6-plus suppression there; a rebase or equivalent maintained patch needs to handle that manifest path for full runtime/list behavior.
  • Upstream Coding Plan availability appears plan- or tenant-dependent, so advertising qwen3.6-plus by default remains a maintainer product-policy choice, especially while fix(qwen): allow explicit qwen3.6-plus on Coding Plan #72664 proposes a narrower explicit-config policy.
  • fix(qwen): allow explicit qwen3.6-plus on Coding Plan #72664 says this PR was routed to central security handling and not used as an autonomous mutation target, so this PR should not be auto-merged without maintainer/security review.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 0b82a7e718e3.

@lilesjtu
lilesjtu force-pushed the fix/qwen-36-plus-coding-plan branch from 8ea42c5 to a69fb71 Compare April 28, 2026 07:35
@openclaw-barnacle openclaw-barnacle Bot added size: XS and removed commands Command implementations size: S labels Apr 28, 2026
@vincentkoc

Copy link
Copy Markdown
Member

Thanks for pushing this forward. The fix has now landed via the narrower replacement PR #72664, which preserves explicit qwen/qwen3.6-plus opt-in on Coding Plan while keeping the built-in catalog suppression behavior. Closing this as superseded, with the original report/work credited in the landed changelog path.

@vincentkoc vincentkoc closed this Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation size: XS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants