Skip to content

feat: add standard (pay-as-you-go) endpoints for Official Qwen API#43878

Closed
wenmengzhou wants to merge 13 commits intoopenclaw:mainfrom
wenmengzhou:feat/add_qwen_official_api
Closed

feat: add standard (pay-as-you-go) endpoints for Official Qwen API#43878
wenmengzhou wants to merge 13 commits intoopenclaw:mainfrom
wenmengzhou:feat/add_qwen_official_api

Conversation

@wenmengzhou
Copy link
Copy Markdown
Contributor

@wenmengzhou wenmengzhou commented Mar 12, 2026

Contributed from Qwen Team @ alibaba

The existing Model Studio integration only exposed the Coding Plan (subscription) endpoints. This adds the standard pay-as-you-go DashScope endpoints for both China and International regions so users can pick the plan that fits their usage.

New onboarding choices:

  • modelstudio-standard-api-key-cn (dashscope.aliyuncs.com)
  • modelstudio-standard-api-key (dashscope-intl.aliyuncs.com)

All four variants (standard/coding-plan × CN/intl) now share the same modelstudio provider and auth profile, which keeps the implicit provider resolution simple — the API key written during onboarding is picked up automatically when generating models.json.

Also change the label Alibaba Model Studo to Qwen (Alibaba Model Studo)

Also fixed model name in Coding Plan notes: glm-4.7 → glm-5.

Summary

Describe the problem and fix in 2–5 bullets:

  • Problem:
  • Why it matters:
  • What changed:
  • What did NOT change (scope boundary):

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • [] Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • [x ] API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #
  • Related #

User-visible / Behavior Changes

List user-visible changes (including defaults/config).
If none, write None.

Security Impact (required)

  • New permissions/capabilities? (No)
  • Secrets/tokens handling changed? (No)
  • New/changed network calls? (No)
  • Command/tool execution surface changed? (No)
  • Data access scope changed? (No)
  • If any Yes, explain risk + mitigation:

Repro + Verification

Environment

  • OS:
  • Runtime/container:
  • Model/provider:
  • Integration/channel (if any):
  • Relevant config (redacted):

Steps

Expected

Actual

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios:
  • Edge cases checked:
  • What you did not verify:

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.

Compatibility / Migration

  • Backward compatible? (Yes/No)
  • Config/env changes? (Yes/No)
  • Migration needed? (Yes/No)
  • If yes, exact upgrade steps:

Failure Recovery (if this breaks)

  • How to disable/revert this change quickly:
  • Files/config to restore:
  • Known bad symptoms reviewers should watch for:

Risks and Mitigations

List only real risks for this PR. Add/remove entries as needed. If none, write None.

  • Risk:
    • Mitigation:

… Cloud Bailian

The existing Model Studio integration only exposed the Coding Plan
(subscription) endpoints. This adds the standard pay-as-you-go
DashScope endpoints for both China and International regions so users
can pick the plan that fits their usage.

New onboarding choices:
- modelstudio-standard-api-key-cn  (dashscope.aliyuncs.com)
- modelstudio-standard-api-key     (dashscope-intl.aliyuncs.com)

All four variants (standard/coding-plan × CN/intl) now share the same
`modelstudio` provider and auth profile, which keeps the implicit
provider resolution simple — the API key written during onboarding is
picked up automatically when generating models.json.

Also fixed model name in Coding Plan notes: glm-4.7 → glm-5.
@openclaw-barnacle openclaw-barnacle bot added commands Command implementations size: S labels Mar 12, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 12, 2026

Greptile Summary

This PR adds two new pay-as-you-go ("standard") DashScope endpoint variants for Alibaba Cloud Model Studio — one for China (dashscope.aliyuncs.com) and one for Global/Intl (dashscope-intl.aliyuncs.com) — alongside a minor fix correcting the model name glm-4.7glm-5 in the existing Coding Plan notes. The implementation correctly mirrors the existing Coding Plan pattern across all touched layers (types, flags, inference, non-interactive auth, config-core, options), and all four variants intentionally share the same modelstudio provider identity and MODELSTUDIO_API_KEY credential.

Key changes:

  • New AuthChoice values modelstudio-standard-api-key-cn and modelstudio-standard-api-key added end-to-end (types → flags → inference → non-interactive auth handler → provider flows → option UI).
  • Two new base-URL constants (MODELSTUDIO_STANDARD_CN_BASE_URL, MODELSTUDIO_STANDARD_GLOBAL_BASE_URL) and four thin wrapper functions in onboard-auth.config-core.ts.
  • The note messages for both new standard entries advertise qwen3.5-flash as an example model, but this model ID is not present in MODELSTUDIO_MODEL_CATALOG or the default model list — users may be misled if they expect it to be pre-configured (see inline comment).

Confidence Score: 4/5

  • Safe to merge; changes are additive and well-contained with one minor documentation inconsistency.
  • The PR is a clean, additive feature that follows established patterns throughout the codebase. All required layers (types, flags, inference, non-interactive auth, interactive flows, option UI) are updated consistently. The only issue found is that the onboarding note messages mention qwen3.5-flash as an available model when it is absent from the model catalog and default model list — this is a documentation/UX inaccuracy rather than a functional bug. No security concerns, no breaking changes.
  • src/commands/auth-choice.apply.api-providers.ts (note message references qwen3.5-flash which is not in the model catalog)
Prompt To Fix All With AI
This is a comment left during a code review.
Path: src/commands/auth-choice.apply.api-providers.ts
Line: 347-348

Comment:
**`qwen3.5-flash` not in model catalog or default model list**

The note message advertises `qwen3.5-flash` as an available model for both standard endpoint variants (also line 367), but this model ID does not appear in `MODELSTUDIO_MODEL_CATALOG` in `onboard-auth.models.ts` and is not part of the `defaultModels` list in `applyModelStudioProviderConfigWithBaseUrl`. Users who see this in the onboarding note and try to use it will get API errors unless they add it manually, or unless you intend it to be a "bring your own model" scenario.

Either add `qwen3.5-flash` to the catalog and default model list (if it's a valid endpoint model), or remove it from the note to avoid misleading users.

```suggestion
      "Models: qwen3.5-plus, qwen3-coder-plus, qwen3-coder-next, etc.",
```

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

Last reviewed commit: 7e93bca

Comment on lines +347 to +348
"Models: qwen3.5-plus, qwen3.5-flash, qwen3-coder-plus, etc.",
].join("\n"),
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.

qwen3.5-flash not in model catalog or default model list

The note message advertises qwen3.5-flash as an available model for both standard endpoint variants (also line 367), but this model ID does not appear in MODELSTUDIO_MODEL_CATALOG in onboard-auth.models.ts and is not part of the defaultModels list in applyModelStudioProviderConfigWithBaseUrl. Users who see this in the onboarding note and try to use it will get API errors unless they add it manually, or unless you intend it to be a "bring your own model" scenario.

Either add qwen3.5-flash to the catalog and default model list (if it's a valid endpoint model), or remove it from the note to avoid misleading users.

Suggested change
"Models: qwen3.5-plus, qwen3.5-flash, qwen3-coder-plus, etc.",
].join("\n"),
"Models: qwen3.5-plus, qwen3-coder-plus, qwen3-coder-next, etc.",
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/commands/auth-choice.apply.api-providers.ts
Line: 347-348

Comment:
**`qwen3.5-flash` not in model catalog or default model list**

The note message advertises `qwen3.5-flash` as an available model for both standard endpoint variants (also line 367), but this model ID does not appear in `MODELSTUDIO_MODEL_CATALOG` in `onboard-auth.models.ts` and is not part of the `defaultModels` list in `applyModelStudioProviderConfigWithBaseUrl`. Users who see this in the onboarding note and try to use it will get API errors unless they add it manually, or unless you intend it to be a "bring your own model" scenario.

Either add `qwen3.5-flash` to the catalog and default model list (if it's a valid endpoint model), or remove it from the note to avoid misleading users.

```suggestion
      "Models: qwen3.5-plus, qwen3-coder-plus, qwen3-coder-next, etc.",
```

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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

qwen3.5-flash is in the model catelog, u r wrong

chinese site
image

singapore site
image

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e93bca770

ℹ️ 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".

Comment on lines +200 to +203
optionKey: "modelstudioStandardApiKeyCn",
authChoice: "modelstudio-standard-api-key-cn",
cliFlag: "--modelstudio-standard-api-key-cn",
cliOption: "--modelstudio-standard-api-key-cn <key>",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Forward new Model Studio standard flags to onboard options

The newly added --modelstudio-standard-api-key(-cn) flags are defined here, but their parsed values are never forwarded in src/cli/program/register.onboard.ts (the action payload only passes modelstudioApiKey and modelstudioApiKeyCn around lines 163-164). As a result, openclaw onboard --non-interactive --auth-choice modelstudio-standard-api-key --modelstudio-standard-api-key ... silently drops the provided key and applyNonInteractiveAuthChoice receives undefined unless the user also set MODELSTUDIO_API_KEY, so this new non-interactive path is effectively broken for flag-based usage.

Useful? React with 👍 / 👎.

@wenmengzhou
Copy link
Copy Markdown
Contributor Author

@obviyus @altaywtf could you review this PR?

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1be16bb556

ℹ️ 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".

Comment on lines +300 to +304
"modelstudio-standard-api-key": {
provider: "modelstudio",
profileId: "modelstudio:default",
expectedProviders: ["modelstudio"],
envLabel: "MODELSTUDIO_API_KEY",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Wire Model Studio standard choices into active provider flow

These new modelstudio-standard-api-key* entries are added in this file, but the interactive path still dispatches through applySimpleAuthChoiceApiProvider (src/commands/auth-choice.apply.api-key-providers.ts), whose SIMPLE_API_KEY_PROVIDER_FLOWS does not include either standard Model Studio choice. In interactive onboarding, selecting either new standard option therefore falls through with no auth profile/provider config changes (no key persisted and no standard base URL/default model applied), so the feature is effectively non-functional outside the non-interactive local handler.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a8b291dd84

ℹ️ 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".

expectedProviders: ["vercel-ai-gateway"],
envLabel: "AI_GATEWAY_API_KEY",
promptMessage: "Enter Vercel AI Gateway API key",
setCredential: setVercelAiGatewayApiKey,
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Import all symbols referenced by provider flow table

The new top-level SIMPLE_API_KEY_PROVIDER_FLOWS literal is evaluated as soon as applyAuthChoiceApiProviders is imported, but identifiers like setVercelAiGatewayApiKey are referenced without being imported in this file. In transpile-only execution paths (for example Bun-driven local CLI runs), this raises a ReferenceError during module initialization and prevents onboarding auth providers from loading at all.

Useful? React with 👍 / 👎.

…l_api

# Conflicts:
#	src/commands/auth-choice-options.ts
#	src/commands/auth-choice.apply.api-providers.ts
#	src/commands/onboard-non-interactive/local/auth-choice-inference.ts
#	src/commands/onboard-non-interactive/local/auth-choice.ts
#	src/commands/onboard-provider-auth-flags.ts
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 747750860b

ℹ️ 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".

Comment on lines +31 to +33
optionKey: "modelstudioStandardApiKeyCn",
flagName: "--modelstudio-standard-api-key-cn",
envVar: "MODELSTUDIO_API_KEY",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Regenerate Model Studio auth manifest entries

The new standard auth methods are added here, but extensions/modelstudio/openclaw.plugin.json was not updated and still advertises only modelstudio-api-key(-cn). Our CLI onboarding flags and non-interactive auth-choice inference are sourced from manifest metadata (src/cli/program/register.onboard.ts:50-53 and src/commands/onboard-non-interactive/local/auth-choice-inference.ts:22-25), so --modelstudio-standard-api-key* is not registered/recognized from the command line and this feature path is effectively unreachable via the documented flags.

Useful? React with 👍 / 👎.

@wenmengzhou wenmengzhou changed the title Qwen Official API: add standard (pay-as-you-go) endpoints for Official Qwen API feat: add standard (pay-as-you-go) endpoints for Official Qwen API Mar 16, 2026
…l_api

# Conflicts:
#	.agents/skills/parallels-discord-roundtrip/SKILL.md
#	src/commands/auth-choice.apply.api-key-providers.ts
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b532ae75f9

ℹ️ 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".

Comment on lines +679 to +680
export function applyModelStudioStandardProviderConfig(cfg: OpenClawConfig): OpenClawConfig {
return applyModelStudioProviderConfigWithBaseUrl(cfg, MODELSTUDIO_STANDARD_GLOBAL_BASE_URL);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Add standard DashScope URLs to native streaming allowlist

These new onboarding paths set modelstudio base URLs to dashscope.aliyuncs.com/compatible-mode/v1 and dashscope-intl.aliyuncs.com/compatible-mode/v1, but applyNativeStreamingUsageCompat still only treats the older coding endpoints as native (src/agents/models-config.providers.ts). For users selecting either new standard choice, the provider misses the compat.supportsUsageInStreaming=true override, and normalizeModelCompat then forces streaming usage support off for this non-OpenAI endpoint (src/agents/model-compat.ts), regressing streamed usage/cost metadata handling specifically on the new standard flow.

Useful? React with 👍 / 👎.

wenmengzhou and others added 2 commits March 18, 2026 14:33
…l_api

Migrate Model Studio Standard (pay-as-you-go) endpoints to the new
extensions/modelstudio plugin structure after upstream refactor.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@openclaw-barnacle openclaw-barnacle bot added agents Agent runtime and tooling and removed app: web-ui App: web-ui labels Mar 18, 2026
@openclaw-barnacle openclaw-barnacle bot added channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web channel: irc labels Mar 18, 2026
…ial_api

# Conflicts:
#	extensions/irc/src/runtime-api.ts
#	extensions/telegram/runtime-api.ts
#	extensions/whatsapp/src/runtime-api.ts
@openclaw-barnacle openclaw-barnacle bot removed channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web channel: irc labels Mar 18, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 99ec56ebeb

ℹ️ 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".

Comment on lines +9 to +12
"provider": "modelstudio",
"method": "standard-api-key-cn",
"choiceId": "modelstudio-standard-api-key-cn",
"choiceLabel": "Standard API Key for China (pay-as-you-go)",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep the generic Model Studio apiKey alias off CN standard

This manifest order changes what --auth-choice apiKey --token-provider modelstudio resolves to. normalizeApiKeyTokenProviderAuthChoice() calls resolveManifestProviderApiKeyChoice(), and that helper just returns the first manifest auth choice for the provider (src/plugins/provider-auth-choices.ts:76-92, src/commands/auth-choice.apply.api-providers.ts:22-35). With modelstudio-standard-api-key-cn now listed first, any existing automation that still uses the generic apiKey path will be silently routed to the China pay-as-you-go endpoint instead of the previous Coding Plan/global flow unless it is updated to pass an explicit auth choice.

Useful? React with 👍 / 👎.

Comment on lines +31 to +33
optionKey: "modelstudioStandardApiKeyCn",
flagName: "--modelstudio-standard-api-key-cn",
envVar: "MODELSTUDIO_API_KEY",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Use a distinct env selector for standard Model Studio auth

These new standard methods still read from MODELSTUDIO_API_KEY, but runtime auth resolution prefers environment variables over stored profiles (src/agents/models-config.providers.ts:707-717). If someone already has MODELSTUDIO_API_KEY in their shell and then picks the new standard flow during onboarding or models auth login, OpenClaw will keep authenticating with the env credential and ignore the newly written modelstudio:standard* profile. In other words, the new plan/region choice cannot actually take effect until the user manually removes that env var.

Useful? React with 👍 / 👎.

…ial_api

# Conflicts:
#	extensions/modelstudio/onboard.ts
#	src/plugin-sdk/provider-models.ts
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 843cbd5ae6

ℹ️ 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".

export * from "../channels/plugins/media-payload.js";
export * from "../channels/plugins/message-tool-schema.js";
export * from "../channels/plugins/normalize/signal.js";
export * from "../channels/plugins/normalize/slack.js";
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep channel-runtime free of Slack runtime deps

This re-export makes every openclaw/plugin-sdk/channel-runtime import walk through src/channels/plugins/normalize/slack.ts, which then goes via src/plugin-sdk/slack-targets.ts into extensions/slack/api.ts. That fan-out eagerly loads extensions/slack/src/actions.tsextensions/slack/src/client.ts, and client.ts has a runtime import of @slack/web-api even though those packages are only declared in extensions/slack/package.json:7-9. In installs/tests that use the generic channel SDK without staged Slack deps (for example third-party channel plugins or slim bundles), simply importing channel-runtime will now fail before any Slack code is actually used.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 19e74c5cf5

ℹ️ 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".

hint: "Endpoint: dashscope-intl.aliyuncs.com",
optionKey: "modelstudioStandardApiKey",
flagName: "--modelstudio-standard-api-key",
envVar: "MODELSTUDIO_API_KEY",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Don't route env-only standard auth through Coding Plan defaults

When the new pay-as-you-go flow is configured only via MODELSTUDIO_API_KEY (for example implicit provider discovery or models list without first writing models.providers.modelstudio.baseUrl), this still goes through buildSingleProviderApiKeyCatalog() and falls back to buildModelStudioProvider()'s Coding Plan default base URL in extensions/modelstudio/provider-catalog.ts. In that env-only scenario, a Standard key selected here is still sent to https://coding-intl.dashscope.aliyuncs.com/v1, so requests fail until the user also adds an explicit base URL manually.

Useful? React with 👍 / 👎.

@wenmengzhou
Copy link
Copy Markdown
Contributor Author

CI Failure Analysis

All 26 failing jobs share the same root cause: SSH permission denied during pnpm install.

Root Cause

The dependency @whiskeysockets/[email protected] (WhatsApp extension) transitively depends on @whiskeysockets/libsignal-node, which is referenced in pnpm-lock.yaml via SSH protocol:

resolution: {commit: 1c30d7d7, repo: [email protected]:whiskeysockets/libsignal-node.git, type: git}
  • Main branch CI runs on self-hosted runners with SSH deploy keys configured, so it can clone this repo successfully.
  • Fork PR CI does not inject SSH keys (standard GitHub security practice for forks), causing all git clone via SSH to fail with Permission denied (publickey).

Evidence

  • All jobs fail within 18–25 seconds (all at pnpm install stage)
  • Main branch latest CI is fully green (f0a0a6a5b4, 2026-03-20)
  • Error message: [email protected]: Permission denied (publickey). fatal: Could not read from remote repository.

This is not a code issue

This is a known limitation of GitHub Actions for fork PRs. No code changes in this PR can fix it.

Possible resolutions:

  1. Change libsignal-node reference in lockfile from SSH ([email protected]:...) to HTTPS (https://github.com/...)
  2. Configure CI workflow to provide SSH keys for fork PRs
  3. A maintainer could merge this branch into the main repo and re-run CI from a non-fork branch

Could a maintainer help with one of the above options? Thank you!

odysseus0 added a commit that referenced this pull request Mar 23, 2026
…or Qwen (#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
@odysseus0
Copy link
Copy Markdown
Contributor

Landed in ade0182 on main — rebased and adapted to the current plugin architecture.

Changes from the original PR:

  • Adapted to defineSingleProviderPluginEntry (new plugin entry shape)
  • Adapted onboard appliers to createModelCatalogPresetAppliers pattern
  • Fixed qwen3.5-flash → models actually in catalog (qwen3-coder-plus, qwen3-coder-next)
  • Fixed glm-4.7glm-5 in Coding Plan notes
  • Dropped unrelated plugin-sdk/channel-runtime.ts and plugin-sdk/whatsapp.ts changes
  • Regenerated config baseline and bundled plugin metadata

Thank you @wenmengzhou for the contribution!

@odysseus0 odysseus0 closed this Mar 23, 2026
BunsDev added a commit that referenced this pull request Mar 24, 2026
- Added new DashScope endpoints for China and global Qwen API keys in ModelStudio/Qwen.
- Consolidated button primitives and refined Knot theme in UI/clarity, improving accessibility.
- Enhanced Control UI with a restyled markdown preview dialog and integrated markdown rendering.
- Added one-click install recipes for bundled skills in Skills/install metadata.
- Updated CLI/skills to provide clearer API key setup guidance.
- Improved Control UI/agents with expandable file rows and comprehensive markdown styles.
- Replaced horizontal navigation with a collapsible tree sidebar in macOS app/config.
- Updated package manager to [email protected] and added new dependencies for markdown preview.
- Various CSS improvements for better styling and accessibility across the UI.

Closes #43878, #53272, #53307. Thanks @BunsDev.
BunsDev added a commit that referenced this pull request Mar 24, 2026
…ncies

- Added standard DashScope endpoints for China and global Qwen API keys in ModelStudio/Qwen.
- Consolidated button primitives and refined Knot theme in UI/clarity, improving accessibility.
- Enhanced Control UI with a restyled markdown preview dialog and integrated markdown rendering.
- Added one-click install recipes for bundled skills in Skills/install metadata.
- Updated CLI/skills to provide clearer API key setup guidance.
- Improved Control UI/agents with expandable file rows and comprehensive markdown styles.
- Replaced horizontal navigation with a collapsible tree sidebar in macOS app/config.
- Updated package manager to [email protected] and added new dependencies for markdown preview.
- Various CSS improvements for better styling and accessibility across the UI.

Closes #43878, #53272, #53307. Thanks @BunsDev.
BunsDev added a commit that referenced this pull request Mar 24, 2026
- Added new DashScope endpoints for China and global Qwen API keys in ModelStudio/Qwen.
- Consolidated button primitives and refined Knot theme in UI/clarity, improving accessibility.
- Enhanced Control UI with a restyled markdown preview dialog and integrated markdown rendering.
- Added one-click install recipes for bundled skills in Skills/install metadata.
- Updated CLI/skills to provide clearer API key setup guidance.
- Improved Control UI/agents with expandable file rows and comprehensive markdown styles.
- Replaced horizontal navigation with a collapsible tree sidebar in macOS app/config.
- Updated package manager to [email protected] and added new dependencies for markdown preview.
- Various CSS improvements for better styling and accessibility across the UI.

Closes #43878, #53272, #53307. Thanks @BunsDev.
BunsDev added a commit that referenced this pull request Mar 24, 2026
…ncies

- Added standard DashScope endpoints for China and global Qwen API keys in ModelStudio/Qwen.
- Consolidated button primitives and refined Knot theme in UI/clarity, improving accessibility.
- Enhanced Control UI with a restyled markdown preview dialog and integrated markdown rendering.
- Added one-click install recipes for bundled skills in Skills/install metadata.
- Updated CLI/skills to provide clearer API key setup guidance.
- Improved Control UI/agents with expandable file rows and comprehensive markdown styles.
- Replaced horizontal navigation with a collapsible tree sidebar in macOS app/config.
- Updated package manager to [email protected] and added new dependencies for markdown preview.
- Various CSS improvements for better styling and accessibility across the UI.

Closes #43878, #53272, #53307. Thanks @BunsDev.
hzq001 pushed a commit to hzq001/openclaw that referenced this pull request Mar 24, 2026
…or Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
furaul pushed a commit to furaul/openclaw that referenced this pull request Mar 24, 2026
…or Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
tiagonix pushed a commit to tiagonix/openclaw that referenced this pull request Mar 24, 2026
…or Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
Arry8 pushed a commit to Arry8/openclaw that referenced this pull request Mar 25, 2026
…or Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
netandreus pushed a commit to netandreus/openclaw that referenced this pull request Mar 25, 2026
…or Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
npmisantosh pushed a commit to npmisantosh/openclaw that referenced this pull request Mar 25, 2026
…or Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>
0x666c6f added a commit to 0x666c6f/openclaw that referenced this pull request Mar 26, 2026
…claw#105)

* fix(web-search): mark DuckDuckGo experimental

* docs(tools): update DuckDuckGo Search for landed plugin code

- Mark as experimental (not just unofficial)
- Add region and safeSearch tool parameters (from DDG schema)
- Add plugin config example for region/safeSearch defaults
- Document auto-detection order (100 = last)
- Note SafeSearch defaults to moderate
- Verified against extensions/duckduckgo/src/

* fix(agents): deny local MEDIA paths for MCP results

* Usage: include reset and deleted session archives (openclaw#43215)

Merged via squash.

Prepared head SHA: 49ed6c2
Co-authored-by: rcrick <[email protected]>
Co-authored-by: frankekn <[email protected]>
Reviewed-by: @frankekn

* docs(tools): soften DDG wording (scrapes -> pulls/gathers)

* fix(build): add stable memory-cli dist entry (openclaw#51759)

Co-authored-by: oliviareid-svg <[email protected]>
Co-authored-by: Frank <[email protected]>

* refactor!: drop legacy CLAWDBOT env compatibility

* refactor!: remove moltbot state-dir migration fallback

* fix(gateway): preserve async hook ingress provenance

* fix(ci): write dist build stamp after builds

* perf: trim vitest hot imports and refresh manifests

* fix(security): unwrap time dispatch wrappers

* fix(plugin-sdk): fall back to src root alias files

* fix(ci): skip docs-only preflight pnpm audit

* docs(changelog): note time exec approval fix

* docs: refresh plugin-sdk api baseline

* fix(runtime): make dist-runtime staging idempotent

* fix(media): bound remote error-body snippet reads

* fix(gateway): gate internal command persistence mutations

* fix: restrict remote marketplace plugin sources

* fix(runtime): skip peer resolution for bundled plugin deps

* docs(agents): prefer current test model examples

* fix(exec): escape invisible approval filler chars

* test(models): refresh example model fixtures

* fix(security): unify dispatch wrapper approval hardening

* fix(security): harden explicit-proxy SSRF pinning

* fix: gate synology chat reply name matching

* docs: clarify sessions_spawn ACP vs subagent policies

* refactor(exec): split wrapper resolution modules

* refactor(exec): make dispatch wrapper semantics spec-driven

* refactor(exec): share wrapper trust planning

* refactor(exec): rename wrapper plans for trust semantics

* fix: include .npmrc in onboard docker build

* test: trim docker live auth mounts

* Docs: refresh config baseline for Synology Chat

* refactor: clarify synology delivery identity names

* refactor: centralize synology dangerous name matching

* refactor: narrow synology legacy name lookup

* refactor: audit synology dangerous name matching

* refactor: dedupe synology config schema

* fix: normalize scoped vitest filter paths

* fix(voice-call): harden webhook pre-auth guards

* fix(synology-chat): fail closed shared webhook paths

* docs: credit nexrin in synology changelog

* test: fix base vitest thread regressions

* test: finish base vitest thread fixture fixes

* test(voice-call): accept oversize webhook socket resets

* test: honor env auth in gateway live probes

* fix: harden plugin docker e2e

* Docs: align MiniMax examples with M2.7

* fix(ci): restore stale guardrails and baselines

* Test: isolate qr dashboard integration suite

* Gateway: resolve fallback plugin context lazily

* fix: bind bootstrap setup codes to node profile

* fix(tlon): unify settings reconciliation semantics

* refactor(synology-chat): type startup webhook path policy

* docs(synology-chat): clarify multi-account webhook paths

* refactor: unify minimax model and failover live policies

* docs: sync minimax m2.7 references

* fix: harden Windows Parallels smoke installs

* docs: reorder unreleased changelog by user impact

* refactor: remove embedded runner cwd mutation

* Infra: support shell carrier allow-always approvals

* refactor: centralize bootstrap profile handling

* refactor: reuse canonical setup bootstrap profile

* fix(plugin-sdk): resolve hashed diagnostic events chunks

* fix(plugin-sdk): normalize hashed diagnostic event exports

* test: fix ci env-sensitive assertions

* fix(gateway): fail closed on unresolved discovery endpoints

* feat: add slash plugin installs

* fix(media): block remote-host file URLs in loaders

* fix(media): harden secondary local path seams

* test: harden no-isolate reply teardown

* docs(changelog): add Windows media security fix

* refactor(gateway): centralize discovery target handling

* test: narrow live transcript scaffolding strip

* test: fix ci docs drift and bun qr exit handling

* fix(browser): enforce node browser proxy allowProfiles

* refactor(media): share local file access guards

* test: stabilize ci test harnesses

* test: harden no-isolate test module resets

* fix(plugins): preserve live hook registry during gateway runs

* test: fix channel summary registry setup

* test: harden isolated test mocks

* chore(plugins): remove opik investigation checkpoints

* ACPX: align pinned runtime version (openclaw#52730)

* ACPX: align pinned runtime version

* ACPX: drop version example from help text

* test: stop leaking image workspace temp dirs

* fix(android): gate canvas bridge to trusted pages (openclaw#52722)

* fix(android): gate canvas bridge to trusted pages

* fix(changelog): note android canvas bridge gating

* Update apps/android/app/src/main/java/ai/openclaw/app/node/CanvasActionTrust.kt

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix(android): snapshot canvas URL on UI thread

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* test: isolate base vitest thread blockers

* fix: sync agent and autoreply e2e updates

* test: harden no-isolate mocked module resets

* docs: reorder unreleased changelog

* fix(changelog): note windows media path guardrails (openclaw#52738)

* fix: alphabetize web search provider listings

* docs: clarify unreleased breaking changes

* test: harden ci isolated mocks

* fix: align websocket stream fallback types

* test: finish no-isolate suite hardening

* style: format image-generation runtime tests

* fix(memory-core): register memory tools independently to prevent coupled failure (openclaw#52668)

Merged via admin squash because current required CI failures are inherited from base and match latest `main` failures outside this PR's `memory-core` surface.

Prepared head SHA: df7f968
Co-authored-by: artwalker <[email protected]>
Reviewed-by: @frankekn

* fix(status): recompute fallback context window (openclaw#51795)

* fix(status): recompute fallback context window

* fix(status): keep live context token caps on fallback

* fix(status): preserve fallback runtime context windows

* fix(status): preserve configured fallback context caps

* fix(status): keep provider-aware transcript context lookups

* fix(status): preserve explicit fallback context caps

* fix(status): clamp fallback configured context caps

* fix(status): keep raw runtime slash ids

* fix(status): refresh plugin-sdk api baseline

* fix(status): preserve fallback context lookup

* test(status): refresh plugin-sdk api baseline

* fix(status): keep runtime slash-id context lookup

---------

Co-authored-by: create <[email protected]>
Co-authored-by: Frank Yang <[email protected]>
Co-authored-by: RichardCao <[email protected]>

* fix(telegram): make buttons schema optional in message tool

The Telegram plugin injects a `buttons` property into the message tool
schema via `createMessageToolButtonsSchema()`, but without wrapping it
in `Type.Optional()`. This causes TypeBox to include `buttons` in the
JSON Schema `required` array.

In isolated sessions (e.g. cron jobs) where no `currentChannel` is set,
all plugin schemas are merged into the message tool. When the LLM calls
the message tool without a `buttons` parameter, AJV validation fails
with: `buttons: must have required property 'buttons'`.

Wrap the buttons schema in `Type.Optional()` so it is not required.

* fix: keep message-tool buttons optional for Telegram and Mattermost (openclaw#52589) (thanks @tylerliu612)

* test: update codex test fixtures to gpt-5.4

* fix: repair runtime seams after rebase

* fix: restore Telegram topic announce delivery (openclaw#51688) (thanks @mvanhorn)

When `replyLike.text` or `replyLike.caption` is an unexpected
non-string value (edge case from some Telegram API responses),
the reply body was coerced to "[object Object]" via string
concatenation. Add a `typeof === "string"` guard to gracefully
fall back to empty string, matching the existing pattern used
for `quoteText` in the same function.

Co-authored-by: Penchan <[email protected]>

* docs: sync generated release baselines

* test: isolate pi embedded model thread fixtures

* fix: restore provider runtime lazy boundary

* fix: preserve Telegram reply context text (openclaw#50500) (thanks @p3nchan)

* fix: guard Telegram reply context text (openclaw#50500) (thanks @p3nchan)

* fix: preserve Telegram reply caption fallback (openclaw#50500) (thanks @p3nchan)

---------

Co-authored-by: Ayaan Zaidi <[email protected]>

* fix: harden gateway SIGTERM shutdown (openclaw#51242) (thanks @juliabush)

* fix: increase shutdown timeout to avoid SIGTERM hang

* fix(telegram): abort polling fetch on shutdown to prevent SIGTERM hang

* fix(gateway): enforce hard exit on shutdown timeout for SIGTERM

* fix: tighten gateway shutdown watchdog

* fix: harden gateway SIGTERM shutdown (openclaw#51242) (thanks @juliabush)

---------

Co-authored-by: Ayaan Zaidi <[email protected]>

* build: prepare 2026.3.22-beta.1

* fix: restore provider runtime lazy boundary

* test: add parallels npm update smoke

* test: split pi embedded model thread fixtures

* fix: stop browser server tests from launching real chrome

* test: stabilize live provider docker probes

* fix: restart windows gateway after npm update

* test: isolate server-context browser harness imports

* test: inject model runtime hooks for thread-safe tests

* test: snapshot ci timeout investigation

* test: target gemini 3.1 flash alias

* test: stabilize trigger handling and hook e2e tests

* build: prepare 2026.3.22

* test: harden channel suite isolation

* test: inject thread-safe deps for agent tools

* test: raise timeout for slow provider auth normalization

* ci: stabilize windows and bun unit lanes

* test: inject thread-safe gateway and ACP seams

* test: isolate pi model and reset-model thread fixtures

* build: prepare 2026.3.23

* test: inject image-tool provider deps for raw threads

* test: stabilize e2e module isolation

* test: decouple vitest config checks from ambient env

* fix: harden parallels smoke agent invocation

* test: avoid repo-root perf profile artifacts

* test: inject thread-safe base seams

* fix: document Telegram asDocument alias (openclaw#52461) (thanks @bakhtiersizhaev)

* feat(telegram): add asDocument param to message tool

Adds `asDocument` as a user-facing alias for the existing `forceDocument`
parameter in the message tool. When set to `true`, media files (images,
videos, GIFs) are sent via `sendDocument` instead of `sendPhoto`/
`sendVideo`/`sendAnimation`, preserving the original file quality
without Telegram compression.

This is useful when agents need to deliver high-resolution images or
uncompressed files to users via Telegram.

`asDocument` is intentionally an alias rather than a replacement — the
existing `forceDocument` continues to work unchanged.

Changes:
- src/agents/tools/message-tool.ts: add asDocument to send schema
- src/agents/tools/telegram-actions.ts: OR asDocument into forceDocument
- src/infra/outbound/message-action-runner.ts: same OR logic for outbound path
- extensions/telegram/src/channel-actions.ts: read and forward asDocument
- src/channels/plugins/actions/actions.test.ts: add test case

* fix: restore channel-actions.ts to main version (rebase conflict fix)

* fix(test): match asDocument test payload to actual params structure

* fix(telegram): preserve forceDocument alias semantics

* fix: document Telegram asDocument alias (openclaw#52461) (thanks @bakhtiersizhaev)

---------

Co-authored-by: Бахтиер Сижаев <[email protected]>
Co-authored-by: Ayaan Zaidi <[email protected]>

* fix: refactor deepseek bundled plugin (openclaw#48762) (thanks @07akioni)

* fix: declare typebox runtime dep for mattermost plugin

* test: reset line webhook mocks between cases

* test: split attempt spawn-workspace thread fixtures

* test: remove replaced spawn-workspace monolith

* refactor: isolate attempt context engine thread helpers

* CI: remove npm release preview workflow (openclaw#52825)

* CI: remove npm release preview workflow

* Docs: align release maintainer skill with manual publish

* Docs: expand release maintainer skill flow

* test: stabilize gateway thread harness

* test: fix status plugin pagination expectation

* test: harden channel suite isolation

* build: sync lockfile for mattermost plugin

* fix: ensure env proxy dispatcher before MiniMax and OpenAI Codex OAuth flows (openclaw#52228)

Verified:
- pnpm install --frozen-lockfile
- NPM_CONFIG_CACHE=/tmp/openclaw-npm-cache-52228 pnpm build
- pnpm check
- pnpm test:macmini (failed on inherited pre-existing plugin contract test: src/plugins/contracts/registry.contract.test.ts missing deepseek in bundled provider contract registry outside this PR surface)

Co-authored-by: openperf <[email protected]>
Co-authored-by: Tak Hoffman <[email protected]>

* fix: restore ci gates

* test: stabilize channel ci gate

* docs: refresh generated config baseline

* release: verify control-ui assets are included in npm tarball

* release-check: include stderr/stdout when npm pack fails

* release: add changelog for control UI tarball check

* fix: keep session transcript pointers fresh after compaction (openclaw#50688)

Co-authored-by: Frank Yang <[email protected]>

* fix(msteams): isolate probe test env credentials

* release: automate macOS publishing (openclaw#52853)

* release: automate macOS publishing

* release: keep mac appcast in openclaw repo

* release: add preflight-only release workflow runs

* release: keep appcast updates manual

* release: generate signed appcast as workflow artifact

* release: require preflight before publish

* release: require mac app for every release

* docs: clarify every release ships mac app

* release: document Sparkle feed and SHA rules

* release: keep publish flow tag-based

* release: stabilize mac appcast flow

* release: document local mac fallback

* Update CHANGELOG.md

* Improve PR template regression prompts

* fix(agents): preserve anthropic thinking block order (openclaw#52961)

* fix(release): ship bundled plugins in pack artifacts

* fix(config): keep built-in channels out of plugin allowlists (openclaw#52964)

* fix(config): keep built-in channels out of plugin allowlists

* docs(changelog): note doctor whatsapp allowlist fix

* docs(changelog): move doctor whatsapp fix to top

* Update CHANGELOG.md

* fix(config): keep built-in auto-enable idempotent

* fix(release): preserve shipped channel surfaces in npm tar (openclaw#52913)

* fix(channels): ship official channel catalog (openclaw#52838)

* fix(release): keep shipped bundles in npm tar (openclaw#52838)

* build(release): fix rebased release-check helpers (openclaw#52838)

* fix(gateway): harden supervised lock and browser attach readiness

* fix(matrix): avoid duplicate runtime api exports

* fix(gateway): avoid probe false negatives after connect

* docs(changelog): note release and matrix fixes

* fix(plugins): unblock Discord/Slack message tool sends and Feishu media (openclaw#52991)

* fix(plugins): unblock Discord and Slack message tool payloads

* docs(changelog): note Discord Slack and Feishu message fixes

* fix(channels): preserve external catalog overrides (openclaw#52988)

* fix(channels): preserve external catalog overrides

* fix(channels): clarify catalog precedence

* fix(channels): respect overridden install specs

* fix(gateway): require admin for agent session reset

* fix(voice-call): stabilize plivo v2 replay keys

* fix(gateway): require auth for canvas routes

* fix(clawhub): resolve auth token for skill browsing (openclaw#53017)

* fix(clawhub): resolve auth token for skill browsing

* docs(changelog): note clawhub skill auth fix

* fix(release): raise npm pack size budget

* Tests: fix fresh-main regressions (openclaw#53011)

* Tests: fix fresh-main regressions

* Tests: avoid chat notice cache priming

---------

Co-authored-by: Vincent Koc <[email protected]>

* fix(config): ignore stale plugin allow entries

* fix(browser): reuse running loopback browser after probe miss

* fix(clawhub): honor macOS auth config path (openclaw#53034)

* docs: fix nav ordering, missing pages, and stale model references

- Sort providers alphabetically in docs.json nav
- Sort channels alphabetically in docs.json nav (slack before synology-chat)
- Add install/migrating-matrix to Maintenance nav section (was orphaned)
- Remove zh-CN/plugins/architecture from nav (file does not exist)
- Add Voice Call to channels index page
- Add missing providers to providers index (DeepSeek, GitHub Copilot, OpenCode Go, Synthetic)
- Sort providers index alphabetically
- Update stale claude-3-5-sonnet model reference to claude-sonnet-4-6 in webhook docs

* fix(clawhub): preserve XDG auth path on macOS

* Agents: fix runtime web_search provider selection (openclaw#53020)

Co-authored-by: Vincent Koc <[email protected]>

* docs: fix CLI command tree, SDK import path, and tool group listing

- Remove non-existent 'secrets migrate' from CLI command tree
- Add actual secrets subcommands: audit, configure, apply
- Add missing plugin subcommands: inspect, uninstall, update, marketplace list
- Fix plugins info -> inspect (actual command name)
- Add message send and broadcast subcommands to command tree
- Remove misleading deprecated import from sdk-overview
- Add sessions_yield and subagents to group:sessions tool group docs
- Fix formatting

* fix(gateway): guard openrouter auto pricing recursion (openclaw#53055)

* test: refresh thread-safe agent fixtures

* Release: fix npm release preflight under pnpm (openclaw#52985)

Co-authored-by: Vincent Koc <[email protected]>

* docs(changelog): add channel catalog override note (openclaw#52988) (openclaw#53059)

* fix: harden update dev switch and refresh changelog

* fix(mistral): repair max-token defaults and doctor migration (openclaw#53054)

* fix(mistral): repair max-token defaults and doctor migration

* fix(mistral): add missing small-model repair cap

* fix(plugins): enable bundled Brave web search plugin by default (openclaw#52072)

Brave is a bundled web search plugin but was missing from
BUNDLED_ENABLED_BY_DEFAULT, causing it to be filtered out during
provider resolution. This made web_search unavailable even when
plugins.entries.brave.enabled was configured.

Fixes openclaw#51937

Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>

* fix(release): fail empty control ui tarballs

* Revert "fix(plugins): enable bundled Brave web search plugin by default (openclaw#52072)"

This reverts commit 0ea3c4d.

* Telegram: preserve inbound debounce order

* Telegram: fix fire-and-forget debounce order

* fix(reply): refresh followup drain callbacks

* Update CHANGELOG.md

* fix(reply): preserve no-debounce inbound concurrency

* fix(reply): clear idle followup callbacks

* fix(inbound): bound tracked debounce keys

* fix: preserve debounce and followup ordering (openclaw#52998) (thanks @osolmaz)

* fix(discord): reply on native command auth failures (openclaw#53072)

* docs(changelog): add missing recent fixes

* fix: bound tracked debounce key accounting

* fix packaged control ui asset lookup (openclaw#53081)

* fix(cli): preserve posix default git dir

* build: prepare 2026.3.23-beta.1

* test: harden canvas host undici isolation

* docs(changelog): credit web search runtime fix

* fix(openai-codex): bootstrap proxy on oauth refresh (openclaw#53078)

Verified:
- pnpm install --frozen-lockfile
- pnpm exec vitest run extensions/openai/openai-codex-provider.runtime.test.ts extensions/openai/openai-provider.test.ts

* release: harden preflight workflows (openclaw#53087)

* release: harden preflight-only workflows

* release: require main for publish runs

* release: select xcode for macos workflow

* release: retry flaky macos preflight steps

* ci: shard bun test lane

* Fix Control UI operator.read scope handling (openclaw#53110)

Preserve Control UI scopes through the device-auth bypass path, normalize implied operator device-auth scopes, ignore cached under-scoped operator tokens, and degrade read-backed main pages gracefully when a connection truly lacks operator.read.

Co-authored-by: Val Alexander <[email protected]>

* build: prepare 2026.3.23

* fix(agents): prefer runtime snapshot for skill secrets

* docs(changelog): note skill secretref runtime fix

* fix(memory): bootstrap lancedb runtime on demand (openclaw#53111)

Bootstrap LanceDB into plugin runtime state on first use for packaged/global installs, keep @lancedb/lancedb plugin-local, and add regression coverage for bundled, cached, retry, and Nix fail-fast runtime paths.

Co-authored-by: Val Alexander <[email protected]>

* build: finalize 2026.3.23 release

* release: upload macos preflight artifacts (openclaw#53105)

* release: upload macos preflight artifacts

* release: speed up macos preflight

* release: use xlarge macos runner

* release: skip dmg path in macos preflight

* fix(subagents): recheck timed-out announce waits (openclaw#53127)

Recheck timed-out subagent announce waits against the latest runtime snapshot before announcing timeout, and keep that recheck best-effort so transient gateway failures do not suppress the announcement.

Co-authored-by: Val Alexander <[email protected]>

* docs(feishu): replace botName with name in config examples (openclaw#52753)

Merged via squash.

Prepared head SHA: 5237726
Co-authored-by: haroldfabla2-hue <[email protected]>
Co-authored-by: altaywtf <[email protected]>
Reviewed-by: @altaywtf

* fix(plugins): accept clawhub uninstall specs

* test(auth): align device scope expectations (openclaw#53151)

* fix: prevent delivery-mirror re-delivery and raise Slack chunk limit (openclaw#45489)

Merged via squash.

Prepared head SHA: c7664c7
Co-authored-by: theo674 <[email protected]>
Co-authored-by: altaywtf <[email protected]>
Reviewed-by: @altaywtf

* Infra: tighten shell-wrapper positional-argv allowlist matching (openclaw#53133)

* Infra: tighten shell carrier allowlist matching

* fix(security): tighten shell carrier allowlist matcher

* fix: generalize api_error detection for fallback model triggering (openclaw#49611)

Co-authored-by: Ayush Ojha <[email protected]>
Co-authored-by: altaywtf <[email protected]>

* feat(modelstudio): add standard (pay-as-you-go) DashScope endpoints for Qwen (openclaw#43878)

Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <[email protected]>

* Release: privatize macOS publish flow (openclaw#53166)

* fix(diagnostics): redact credentials from cache-trace diagnostic output

Refs openclaw#53103

* Release: document manual macOS asset upload (openclaw#53178)

* Release: document manual macOS asset upload

* Release: document macOS smoke-test mode

* docs(changelog): reorder release highlights

* test(whatsapp): stabilize login coverage in shared workers

* test(whatsapp): preserve session exports in login coverage

* test(whatsapp): preserve media test module exports

* test(whatsapp): preserve harness session exports

* fix(ci): stabilize whatsapp extension checks

* test: make update-cli checkout path assertion platform-safe

* fix(auth): prevent stale auth store reverts (openclaw#53211)

* Doctor: prune stale plugin allowlist and entry refs (openclaw#53187)

Signed-off-by: sallyom <[email protected]>

* test: stabilize test isolation

* test: update command coverage

* test: expand gemini live transcript stripping

* test: fix update-cli default path assertion

* chore(sre:PLA-920): adopt upstream sync changes

* fix(sre:PLA-920): align branch with adopted upstream tree

* build(sre:PLA-920): refresh dist artifacts

* test(sre:PLA-920): align incident-format expectations

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: Vincent Koc <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
Co-authored-by: Rick_Xu <[email protected]>
Co-authored-by: rcrick <[email protected]>
Co-authored-by: frankekn <[email protected]>
Co-authored-by: oliviareid-svg <[email protected]>
Co-authored-by: oliviareid-svg <[email protected]>
Co-authored-by: Frank <[email protected]>
Co-authored-by: scoootscooob <[email protected]>
Co-authored-by: ruochen <[email protected]>
Co-authored-by: Onur Solmaz <[email protected]>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Frank Yang <[email protected]>
Co-authored-by: artwalker <[email protected]>
Co-authored-by: RichardCao <[email protected]>
Co-authored-by: create <[email protected]>
Co-authored-by: RichardCao <[email protected]>
Co-authored-by: liuyang <[email protected]>
Co-authored-by: Ayaan Zaidi <[email protected]>
Co-authored-by: Matt Van Horn <[email protected]>
Co-authored-by: Penchan <[email protected]>
Co-authored-by: Penchan <[email protected]>
Co-authored-by: Julia Bush <[email protected]>
Co-authored-by: Bakhtier Sizhaev <[email protected]>
Co-authored-by: Бахтиер Сижаев <[email protected]>
Co-authored-by: wangchunyue <[email protected]>
Co-authored-by: Tak Hoffman <[email protected]>
Co-authored-by: evann <[email protected]>
Co-authored-by: Robin Waslander <[email protected]>
Co-authored-by: Sathvik Veerapaneni <[email protected]>
Co-authored-by: Nimrod Gutman <[email protected]>
Co-authored-by: Luke <[email protected]>
Co-authored-by: scoootscooob <[email protected]>
Co-authored-by: Jamil Zakirov <[email protected]>
Co-authored-by: TheRipper <[email protected]>
Co-authored-by: Quinn H. <[email protected]>
Co-authored-by: Ubuntu <[email protected]>
Co-authored-by: Val Alexander <[email protected]>
Co-authored-by: betoblair <[email protected]>
Co-authored-by: haroldfabla2-hue <[email protected]>
Co-authored-by: altaywtf <[email protected]>
Co-authored-by: Altay <[email protected]>
Co-authored-by: theo674 <[email protected]>
Co-authored-by: theo674 <[email protected]>
Co-authored-by: Ayush Ojha <[email protected]>
Co-authored-by: Ayush Ojha <[email protected]>
Co-authored-by: George Zhang <[email protected]>
Co-authored-by: wenmeng zhou <[email protected]>
Co-authored-by: Onur <[email protected]>
Co-authored-by: Sally O'Malley <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling commands Command implementations extensions: modelstudio size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants