From 7e93bca770868cf5f03d43d805e4cd2a7ef841db Mon Sep 17 00:00:00 2001 From: wenmengzhou Date: Thu, 12 Mar 2026 15:47:14 +0800 Subject: [PATCH 1/6] feat(modelstudio): add standard (pay-as-you-go) endpoints for Alibaba Cloud Bailian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- src/commands/auth-choice-options.ts | 19 ++++++- .../auth-choice.apply.api-providers.ts | 48 +++++++++++++++- src/commands/onboard-auth.config-core.ts | 22 ++++++++ src/commands/onboard-auth.models.ts | 7 ++- src/commands/onboard-auth.ts | 4 ++ .../local/auth-choice-inference.ts | 2 + .../local/auth-choice.ts | 56 +++++++++++++++++++ src/commands/onboard-provider-auth-flags.ts | 16 ++++++ src/commands/onboard-types.ts | 4 ++ 9 files changed, 173 insertions(+), 5 deletions(-) diff --git a/src/commands/auth-choice-options.ts b/src/commands/auth-choice-options.ts index 077fee024b9..ca55eb957c5 100644 --- a/src/commands/auth-choice-options.ts +++ b/src/commands/auth-choice-options.ts @@ -128,8 +128,13 @@ const AUTH_CHOICE_GROUP_DEFS: { { value: "modelstudio", label: "Alibaba Cloud Model Studio", - hint: "Coding Plan API key (CN / Global)", - choices: ["modelstudio-api-key-cn", "modelstudio-api-key"], + hint: "Standard / Coding Plan (CN / Global)", + choices: [ + "modelstudio-standard-api-key-cn", + "modelstudio-standard-api-key", + "modelstudio-api-key-cn", + "modelstudio-api-key", + ], }, { value: "copilot", @@ -319,6 +324,16 @@ const BASE_AUTH_CHOICE_OPTIONS: ReadonlyArray = [ hint: "Official fast tier (legacy: Lightning)", }, { value: "qianfan-api-key", label: "Qianfan API key" }, + { + value: "modelstudio-standard-api-key-cn", + label: "Standard API Key for China (pay-as-you-go)", + hint: "Endpoint: dashscope.aliyuncs.com", + }, + { + value: "modelstudio-standard-api-key", + label: "Standard API Key for Global/Intl (pay-as-you-go)", + hint: "Endpoint: dashscope-intl.aliyuncs.com", + }, { value: "modelstudio-api-key-cn", label: "Coding Plan API Key for China (subscription)", diff --git a/src/commands/auth-choice.apply.api-providers.ts b/src/commands/auth-choice.apply.api-providers.ts index 9e7419f7fda..77a037c4abd 100644 --- a/src/commands/auth-choice.apply.api-providers.ts +++ b/src/commands/auth-choice.apply.api-providers.ts @@ -84,6 +84,10 @@ import { applyModelStudioConfigCn, applyModelStudioProviderConfig, applyModelStudioProviderConfigCn, + applyModelStudioStandardConfig, + applyModelStudioStandardConfigCn, + applyModelStudioStandardProviderConfig, + applyModelStudioStandardProviderConfigCn, setModelStudioApiKey, } from "./onboard-auth.js"; import type { AuthChoice, SecretInputMode } from "./onboard-types.js"; @@ -326,6 +330,46 @@ const SIMPLE_API_KEY_PROVIDER_FLOWS: Partial String(value ?? "").trim(), + validate: (value) => (String(value ?? "").trim() ? undefined : "Required"), + }, + "modelstudio-standard-api-key": { + provider: "modelstudio", + profileId: "modelstudio:default", + expectedProviders: ["modelstudio"], + envLabel: "MODELSTUDIO_API_KEY", + promptMessage: "Enter Alibaba Cloud Model Studio API key (Global/Intl)", + setCredential: setModelStudioApiKey, + defaultModel: MODELSTUDIO_DEFAULT_MODEL_REF, + applyDefaultConfig: applyModelStudioStandardConfig, + applyProviderConfig: applyModelStudioStandardProviderConfig, + noteDefault: MODELSTUDIO_DEFAULT_MODEL_REF, + noteMessage: [ + "Get your API key at: https://modelstudio.console.alibabacloud.com/", + "Endpoint: dashscope-intl.aliyuncs.com/compatible-mode/v1", + "Models: qwen3.5-plus, qwen3.5-flash, qwen3-coder-plus, etc.", + ].join("\n"), + noteTitle: "Alibaba Cloud Model Studio (Global/Intl)", + normalize: (value) => String(value ?? "").trim(), + validate: (value) => (String(value ?? "").trim() ? undefined : "Required"), + }, "modelstudio-api-key-cn": { provider: "modelstudio", profileId: "modelstudio:default", @@ -340,7 +384,7 @@ const SIMPLE_API_KEY_PROVIDER_FLOWS: Partial String(value ?? "").trim(), @@ -360,7 +404,7 @@ const SIMPLE_API_KEY_PROVIDER_FLOWS: Partial String(value ?? "").trim(), diff --git a/src/commands/onboard-auth.config-core.ts b/src/commands/onboard-auth.config-core.ts index 4bda29df1bf..0073a93dcb0 100644 --- a/src/commands/onboard-auth.config-core.ts +++ b/src/commands/onboard-auth.config-core.ts @@ -82,6 +82,8 @@ import { XAI_DEFAULT_MODEL_ID, MODELSTUDIO_CN_BASE_URL, MODELSTUDIO_GLOBAL_BASE_URL, + MODELSTUDIO_STANDARD_CN_BASE_URL, + MODELSTUDIO_STANDARD_GLOBAL_BASE_URL, MODELSTUDIO_DEFAULT_MODEL_REF, } from "./onboard-auth.models.js"; @@ -666,3 +668,23 @@ export function applyModelStudioConfigCn(cfg: OpenClawConfig): OpenClawConfig { const next = applyModelStudioProviderConfigCn(cfg); return applyAgentDefaultModelPrimary(next, MODELSTUDIO_DEFAULT_MODEL_REF); } + +// Alibaba Cloud Model Studio Standard (pay-as-you-go) + +export function applyModelStudioStandardProviderConfig(cfg: OpenClawConfig): OpenClawConfig { + return applyModelStudioProviderConfigWithBaseUrl(cfg, MODELSTUDIO_STANDARD_GLOBAL_BASE_URL); +} + +export function applyModelStudioStandardProviderConfigCn(cfg: OpenClawConfig): OpenClawConfig { + return applyModelStudioProviderConfigWithBaseUrl(cfg, MODELSTUDIO_STANDARD_CN_BASE_URL); +} + +export function applyModelStudioStandardConfig(cfg: OpenClawConfig): OpenClawConfig { + const next = applyModelStudioStandardProviderConfig(cfg); + return applyAgentDefaultModelPrimary(next, MODELSTUDIO_DEFAULT_MODEL_REF); +} + +export function applyModelStudioStandardConfigCn(cfg: OpenClawConfig): OpenClawConfig { + const next = applyModelStudioStandardProviderConfigCn(cfg); + return applyAgentDefaultModelPrimary(next, MODELSTUDIO_DEFAULT_MODEL_REF); +} diff --git a/src/commands/onboard-auth.models.ts b/src/commands/onboard-auth.models.ts index 2945e7b4461..93fa9b6edf2 100644 --- a/src/commands/onboard-auth.models.ts +++ b/src/commands/onboard-auth.models.ts @@ -225,7 +225,12 @@ export function buildKilocodeModelDefinition(): ModelDefinitionConfig { }; } -// Alibaba Cloud Model Studio Coding Plan +// Alibaba Cloud Model Studio (百炼) +// Standard (pay-as-you-go) endpoints +export const MODELSTUDIO_STANDARD_CN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"; +export const MODELSTUDIO_STANDARD_GLOBAL_BASE_URL = + "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"; +// Coding Plan (subscription) endpoints export const MODELSTUDIO_CN_BASE_URL = "https://coding.dashscope.aliyuncs.com/v1"; export const MODELSTUDIO_GLOBAL_BASE_URL = "https://coding-intl.dashscope.aliyuncs.com/v1"; export const MODELSTUDIO_DEFAULT_MODEL_ID = "qwen3.5-plus"; diff --git a/src/commands/onboard-auth.ts b/src/commands/onboard-auth.ts index cda460b6c19..e7e1b4f9783 100644 --- a/src/commands/onboard-auth.ts +++ b/src/commands/onboard-auth.ts @@ -43,6 +43,10 @@ export { applyModelStudioConfigCn, applyModelStudioProviderConfig, applyModelStudioProviderConfigCn, + applyModelStudioStandardConfig, + applyModelStudioStandardConfigCn, + applyModelStudioStandardProviderConfig, + applyModelStudioStandardProviderConfigCn, KILOCODE_BASE_URL, } from "./onboard-auth.config-core.js"; export { diff --git a/src/commands/onboard-non-interactive/local/auth-choice-inference.ts b/src/commands/onboard-non-interactive/local/auth-choice-inference.ts index 212bb9dd890..690c86c39ba 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice-inference.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice-inference.ts @@ -31,6 +31,8 @@ type AuthChoiceFlagOptions = Pick< | "xaiApiKey" | "litellmApiKey" | "qianfanApiKey" + | "modelstudioStandardApiKeyCn" + | "modelstudioStandardApiKey" | "modelstudioApiKeyCn" | "modelstudioApiKey" | "volcengineApiKey" diff --git a/src/commands/onboard-non-interactive/local/auth-choice.ts b/src/commands/onboard-non-interactive/local/auth-choice.ts index af119c12efe..c9b68c3925b 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice.ts @@ -18,6 +18,8 @@ import { applyQianfanConfig, applyModelStudioConfig, applyModelStudioConfigCn, + applyModelStudioStandardConfig, + applyModelStudioStandardConfigCn, applyKimiCodeConfig, applyMinimaxApiConfig, applyMinimaxApiConfigCn, @@ -508,6 +510,60 @@ export async function applyNonInteractiveAuthChoice(params: { return applyQianfanConfig(nextConfig); } + if (authChoice === "modelstudio-standard-api-key-cn") { + const resolved = await resolveApiKey({ + provider: "modelstudio", + cfg: baseConfig, + flagValue: opts.modelstudioStandardApiKeyCn, + flagName: "--modelstudio-standard-api-key-cn", + envVar: "MODELSTUDIO_API_KEY", + runtime, + }); + if (!resolved) { + return null; + } + if ( + !(await maybeSetResolvedApiKey(resolved, (value) => + setModelStudioApiKey(value, undefined, apiKeyStorageOptions), + )) + ) { + return null; + } + nextConfig = applyAuthProfileConfig(nextConfig, { + profileId: "modelstudio:default", + provider: "modelstudio", + mode: "api_key", + }); + return applyModelStudioStandardConfigCn(nextConfig); + } + + if (authChoice === "modelstudio-standard-api-key") { + const resolved = await resolveApiKey({ + provider: "modelstudio", + cfg: baseConfig, + flagValue: opts.modelstudioStandardApiKey, + flagName: "--modelstudio-standard-api-key", + envVar: "MODELSTUDIO_API_KEY", + runtime, + }); + if (!resolved) { + return null; + } + if ( + !(await maybeSetResolvedApiKey(resolved, (value) => + setModelStudioApiKey(value, undefined, apiKeyStorageOptions), + )) + ) { + return null; + } + nextConfig = applyAuthProfileConfig(nextConfig, { + profileId: "modelstudio:default", + provider: "modelstudio", + mode: "api_key", + }); + return applyModelStudioStandardConfig(nextConfig); + } + if (authChoice === "modelstudio-api-key-cn") { const resolved = await resolveApiKey({ provider: "modelstudio", diff --git a/src/commands/onboard-provider-auth-flags.ts b/src/commands/onboard-provider-auth-flags.ts index 7610727097f..949469d53fd 100644 --- a/src/commands/onboard-provider-auth-flags.ts +++ b/src/commands/onboard-provider-auth-flags.ts @@ -24,6 +24,8 @@ type OnboardProviderAuthOptionKey = keyof Pick< | "xaiApiKey" | "litellmApiKey" | "qianfanApiKey" + | "modelstudioStandardApiKeyCn" + | "modelstudioStandardApiKey" | "modelstudioApiKeyCn" | "modelstudioApiKey" | "volcengineApiKey" @@ -194,6 +196,20 @@ export const ONBOARD_PROVIDER_AUTH_FLAGS: ReadonlyArray cliOption: "--qianfan-api-key ", description: "QIANFAN API key", }, + { + optionKey: "modelstudioStandardApiKeyCn", + authChoice: "modelstudio-standard-api-key-cn", + cliFlag: "--modelstudio-standard-api-key-cn", + cliOption: "--modelstudio-standard-api-key-cn ", + description: "Alibaba Cloud Model Studio API key (China, pay-as-you-go)", + }, + { + optionKey: "modelstudioStandardApiKey", + authChoice: "modelstudio-standard-api-key", + cliFlag: "--modelstudio-standard-api-key", + cliOption: "--modelstudio-standard-api-key ", + description: "Alibaba Cloud Model Studio API key (Global/Intl, pay-as-you-go)", + }, { optionKey: "modelstudioApiKeyCn", authChoice: "modelstudio-api-key-cn", diff --git a/src/commands/onboard-types.ts b/src/commands/onboard-types.ts index 40a02e85c15..224166c68df 100644 --- a/src/commands/onboard-types.ts +++ b/src/commands/onboard-types.ts @@ -51,6 +51,8 @@ export type AuthChoice = | "volcengine-api-key" | "byteplus-api-key" | "qianfan-api-key" + | "modelstudio-standard-api-key-cn" + | "modelstudio-standard-api-key" | "modelstudio-api-key-cn" | "modelstudio-api-key" | "custom-api-key" @@ -142,6 +144,8 @@ export type OnboardOptions = { volcengineApiKey?: string; byteplusApiKey?: string; qianfanApiKey?: string; + modelstudioStandardApiKeyCn?: string; + modelstudioStandardApiKey?: string; modelstudioApiKeyCn?: string; modelstudioApiKey?: string; customBaseUrl?: string; From b73ee554433c949a54b2fb847b3dcb381e2ef2c7 Mon Sep 17 00:00:00 2001 From: wenmengzhou Date: Thu, 12 Mar 2026 17:15:18 +0800 Subject: [PATCH 2/6] refine modelstudio label --- src/commands/auth-choice-options.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/auth-choice-options.ts b/src/commands/auth-choice-options.ts index ca55eb957c5..799bbce4ae0 100644 --- a/src/commands/auth-choice-options.ts +++ b/src/commands/auth-choice-options.ts @@ -127,7 +127,7 @@ const AUTH_CHOICE_GROUP_DEFS: { }, { value: "modelstudio", - label: "Alibaba Cloud Model Studio", + label: "Qwen (Alibaba Cloud Model Studio)", hint: "Standard / Coding Plan (CN / Global)", choices: [ "modelstudio-standard-api-key-cn", From dacbd38e2ade6283c559be7e4dfbbc21cc2f252b Mon Sep 17 00:00:00 2001 From: wenmengzhou Date: Wed, 18 Mar 2026 14:33:42 +0800 Subject: [PATCH 3/6] chore: update workflow and navigation test screenshot Co-Authored-By: Claude Opus 4.6 --- .agent/workflows/update_clawdbot.md | 14 +++++++------- ...s-chat-history-to-the-latest-message-1.png | Bin 35014 -> 35105 bytes 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.agent/workflows/update_clawdbot.md b/.agent/workflows/update_clawdbot.md index 04a079aab41..0543e7c2a68 100644 --- a/.agent/workflows/update_clawdbot.md +++ b/.agent/workflows/update_clawdbot.md @@ -1,8 +1,8 @@ --- -description: Update Clawdbot from upstream when branch has diverged (ahead/behind) +description: Update OpenClaw from upstream when branch has diverged (ahead/behind) --- -# Clawdbot Upstream Sync Workflow +# OpenClaw Upstream Sync Workflow Use this workflow when your fork has diverged from upstream (e.g., "18 commits ahead, 29 commits behind"). @@ -132,16 +132,16 @@ pnpm mac:package ```bash # Kill running app -pkill -x "Clawdbot" || true +pkill -x "OpenClaw" || true # Move old version -mv /Applications/Clawdbot.app /tmp/Clawdbot-backup.app +mv /Applications/OpenClaw.app /tmp/OpenClaw-backup.app # Install new build -cp -R dist/Clawdbot.app /Applications/ +cp -R dist/OpenClaw.app /Applications/ # Launch -open /Applications/Clawdbot.app +open /Applications/OpenClaw.app ``` --- @@ -235,7 +235,7 @@ If upstream introduced new model configurations: # Check for OpenRouter API key requirements grep -r "openrouter\|OPENROUTER" src/ --include="*.ts" --include="*.js" -# Update clawdbot.json with fallback chains +# Update openclaw.json with fallback chains # Add model fallback configurations as needed ``` diff --git a/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png b/ui/src/ui/__screenshots__/navigation.browser.test.ts/control-UI-routing-auto-scrolls-chat-history-to-the-latest-message-1.png index eae372b60fa88da755a37848a546623402e47f2f..6685d2ad93495c121d8fa47afca4ce8ae230b2ab 100644 GIT binary patch literal 35105 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%0Ap+a*F!(|jr3YC8UB7(70W|itQnU0Uv?|* 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 lnNt;}8vF_uOYjQJ2T28qGO^DA{|9Yuc2EES literal 35014 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 From 468a62679a99bc24db8aceecafe175039f1784da Mon Sep 17 00:00:00 2001 From: wenmengzhou Date: Wed, 18 Mar 2026 15:23:32 +0800 Subject: [PATCH 4/6] fix(modelstudio): address PR review feedback - Add standard auth methods to openclaw.plugin.json manifest so CLI flags and non-interactive auth-choice inference work correctly - Add distinct profileId for standard auth methods to prevent credential collision between Coding Plan and Standard flows Co-Authored-By: Claude Opus 4.6 --- extensions/modelstudio/index.ts | 2 ++ extensions/modelstudio/openclaw.plugin.json | 32 +++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/extensions/modelstudio/index.ts b/extensions/modelstudio/index.ts index b821c5a0fa6..5805674bb94 100644 --- a/extensions/modelstudio/index.ts +++ b/extensions/modelstudio/index.ts @@ -31,6 +31,7 @@ export default definePluginEntry({ optionKey: "modelstudioStandardApiKeyCn", flagName: "--modelstudio-standard-api-key-cn", envVar: "MODELSTUDIO_API_KEY", + profileId: "modelstudio:standard-cn", promptMessage: "Enter Alibaba Cloud Model Studio API key (China)", defaultModel: MODELSTUDIO_DEFAULT_MODEL_REF, expectedProviders: ["modelstudio"], @@ -58,6 +59,7 @@ export default definePluginEntry({ optionKey: "modelstudioStandardApiKey", flagName: "--modelstudio-standard-api-key", envVar: "MODELSTUDIO_API_KEY", + profileId: "modelstudio:standard", promptMessage: "Enter Alibaba Cloud Model Studio API key (Global/Intl)", defaultModel: MODELSTUDIO_DEFAULT_MODEL_REF, expectedProviders: ["modelstudio"], diff --git a/extensions/modelstudio/openclaw.plugin.json b/extensions/modelstudio/openclaw.plugin.json index e6c20db50c7..f1bcce0ff3e 100644 --- a/extensions/modelstudio/openclaw.plugin.json +++ b/extensions/modelstudio/openclaw.plugin.json @@ -5,6 +5,34 @@ "modelstudio": ["MODELSTUDIO_API_KEY"] }, "providerAuthChoices": [ + { + "provider": "modelstudio", + "method": "standard-api-key-cn", + "choiceId": "modelstudio-standard-api-key-cn", + "choiceLabel": "Standard API Key for China (pay-as-you-go)", + "choiceHint": "Endpoint: dashscope.aliyuncs.com", + "groupId": "modelstudio", + "groupLabel": "Alibaba Cloud Model Studio", + "groupHint": "Standard / Coding Plan (CN / Global)", + "optionKey": "modelstudioStandardApiKeyCn", + "cliFlag": "--modelstudio-standard-api-key-cn", + "cliOption": "--modelstudio-standard-api-key-cn ", + "cliDescription": "Alibaba Cloud Model Studio Standard API key (China)" + }, + { + "provider": "modelstudio", + "method": "standard-api-key", + "choiceId": "modelstudio-standard-api-key", + "choiceLabel": "Standard API Key for Global/Intl (pay-as-you-go)", + "choiceHint": "Endpoint: dashscope-intl.aliyuncs.com", + "groupId": "modelstudio", + "groupLabel": "Alibaba Cloud Model Studio", + "groupHint": "Standard / Coding Plan (CN / Global)", + "optionKey": "modelstudioStandardApiKey", + "cliFlag": "--modelstudio-standard-api-key", + "cliOption": "--modelstudio-standard-api-key ", + "cliDescription": "Alibaba Cloud Model Studio Standard API key (Global/Intl)" + }, { "provider": "modelstudio", "method": "api-key-cn", @@ -13,7 +41,7 @@ "choiceHint": "Endpoint: coding.dashscope.aliyuncs.com", "groupId": "modelstudio", "groupLabel": "Alibaba Cloud Model Studio", - "groupHint": "Coding Plan API key (CN / Global)", + "groupHint": "Standard / Coding Plan (CN / Global)", "optionKey": "modelstudioApiKeyCn", "cliFlag": "--modelstudio-api-key-cn", "cliOption": "--modelstudio-api-key-cn ", @@ -27,7 +55,7 @@ "choiceHint": "Endpoint: coding-intl.dashscope.aliyuncs.com", "groupId": "modelstudio", "groupLabel": "Alibaba Cloud Model Studio", - "groupHint": "Coding Plan API key (CN / Global)", + "groupHint": "Standard / Coding Plan (CN / Global)", "optionKey": "modelstudioApiKey", "cliFlag": "--modelstudio-api-key", "cliOption": "--modelstudio-api-key ", From 9da7c35804b3def3b40af07fed7db714b4e3c918 Mon Sep 17 00:00:00 2001 From: wenmengzhou Date: Wed, 18 Mar 2026 23:27:50 +0800 Subject: [PATCH 5/6] fix: add missing re-exports in extension runtime-api barrel files After upstream API boundary refactor, several runtime-api.ts barrel files were missing re-exports causing runtime SyntaxError on startup. Co-Authored-By: Claude Opus 4.6 --- extensions/irc/src/runtime-api.ts | 8 ++++++++ extensions/telegram/runtime-api.ts | 26 ++++++++++++++++++++++++++ extensions/whatsapp/src/runtime-api.ts | 5 +++++ src/plugin-sdk/channel-runtime.ts | 1 + src/plugin-sdk/whatsapp.ts | 8 +++++++- 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/extensions/irc/src/runtime-api.ts b/extensions/irc/src/runtime-api.ts index eebfe798ede..4b1fa55e1f9 100644 --- a/extensions/irc/src/runtime-api.ts +++ b/extensions/irc/src/runtime-api.ts @@ -33,6 +33,14 @@ export { setAccountEnabledInConfigSection, setTopLevelChannelAllowFrom, setTopLevelChannelDmPolicyWithAllowFrom, + BlockStreamingCoalesceSchema, + DEFAULT_ACCOUNT_ID, + DmConfigSchema, + DmPolicySchema, + GroupPolicySchema, + MarkdownConfigSchema, + ReplyRuntimeConfigSchemaShape, + requireOpenAllowFrom, ToolPolicySchema, warnMissingProviderGroupPolicyFallbackOnce, type BaseProbeResult, diff --git a/extensions/telegram/runtime-api.ts b/extensions/telegram/runtime-api.ts index b645e653834..eff9505a1cd 100644 --- a/extensions/telegram/runtime-api.ts +++ b/extensions/telegram/runtime-api.ts @@ -47,3 +47,29 @@ export { } from "../../src/channels/account-snapshot-fields.js"; export { resolveTelegramPollVisibility } from "../../src/poll-params.js"; export { PAIRING_APPROVED_MESSAGE } from "../../src/channels/plugins/pairing-message.js"; + +// Send / message action helpers +export { + createForumTopicTelegram, + deleteMessageTelegram, + editForumTopicTelegram, + editMessageReplyMarkupTelegram, + editMessageTelegram, + pinMessageTelegram, + reactMessageTelegram, + renameForumTopicTelegram, + sendMessageTelegram, + sendPollTelegram, + sendStickerTelegram, + sendTypingTelegram, + unpinMessageTelegram, +} from "./src/send.js"; +export { resolveTelegramToken } from "./src/token.js"; +export { telegramMessageActions } from "./src/channel-actions.js"; +export { collectTelegramUnmentionedGroupIds, auditTelegramGroupMembership } from "./src/audit.js"; +export { + setTelegramThreadBindingIdleTimeoutBySessionKey, + setTelegramThreadBindingMaxAgeBySessionKey, +} from "./src/thread-bindings.js"; +export { monitorTelegramProvider } from "./src/monitor.js"; +export { probeTelegram } from "./src/probe.js"; diff --git a/extensions/whatsapp/src/runtime-api.ts b/extensions/whatsapp/src/runtime-api.ts index ce89a02eb76..97a39046138 100644 --- a/extensions/whatsapp/src/runtime-api.ts +++ b/extensions/whatsapp/src/runtime-api.ts @@ -1,17 +1,22 @@ export { + buildChannelConfigSchema, createActionGate, createWhatsAppOutboundBase, DEFAULT_ACCOUNT_ID, formatWhatsAppConfigAllowFromEntries, + getChatChannelMeta, isWhatsAppGroupJid, jsonResult, + normalizeE164, normalizeWhatsAppTarget, readReactionParams, readStringParam, + resolveWhatsAppGroupIntroHint, resolveWhatsAppHeartbeatRecipients, resolveWhatsAppMentionStripRegexes, resolveWhatsAppOutboundTarget, ToolAuthorizationError, + WhatsAppConfigSchema, type ChannelPlugin, type ChannelMessageActionName, type DmPolicy, diff --git a/src/plugin-sdk/channel-runtime.ts b/src/plugin-sdk/channel-runtime.ts index 59832d70f80..53dfb926834 100644 --- a/src/plugin-sdk/channel-runtime.ts +++ b/src/plugin-sdk/channel-runtime.ts @@ -35,6 +35,7 @@ export * from "../channels/plugins/config-writes.js"; 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"; export * from "../channels/plugins/normalize/whatsapp.js"; export * from "../channels/plugins/outbound/direct-text-media.js"; export * from "../channels/plugins/outbound/interactive.js"; diff --git a/src/plugin-sdk/whatsapp.ts b/src/plugin-sdk/whatsapp.ts index a3f3293a0fa..0d33338776d 100644 --- a/src/plugin-sdk/whatsapp.ts +++ b/src/plugin-sdk/whatsapp.ts @@ -61,7 +61,13 @@ export { export { resolveWhatsAppHeartbeatRecipients } from "../channels/plugins/whatsapp-heartbeat.js"; export { WhatsAppConfigSchema } from "../config/zod-schema.providers-whatsapp.js"; -export { createActionGate, readStringParam } from "../agents/tools/common.js"; +export { + createActionGate, + jsonResult, + readReactionParams, + readStringParam, + ToolAuthorizationError, +} from "../agents/tools/common.js"; export { createPluginRuntimeStore } from "./runtime-store.js"; export { normalizeE164 } from "../utils.js"; From be74e306a9c499cafb521dd486cae25f1b6ffd4b Mon Sep 17 00:00:00 2001 From: wenmengzhou Date: Wed, 18 Mar 2026 23:28:42 +0800 Subject: [PATCH 6/6] feat(modelstudio): update groupLabel to "Qwen (Alibaba Cloud Model Studio)" --- extensions/modelstudio/index.ts | 8 ++++---- extensions/modelstudio/openclaw.plugin.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/extensions/modelstudio/index.ts b/extensions/modelstudio/index.ts index 5805674bb94..12bec639606 100644 --- a/extensions/modelstudio/index.ts +++ b/extensions/modelstudio/index.ts @@ -47,7 +47,7 @@ export default definePluginEntry({ choiceLabel: "Standard API Key for China (pay-as-you-go)", choiceHint: "Endpoint: dashscope.aliyuncs.com", groupId: "modelstudio", - groupLabel: "Alibaba Cloud Model Studio", + groupLabel: "Qwen (Alibaba Cloud Model Studio)", groupHint: "Standard / Coding Plan (CN / Global)", }, }), @@ -75,7 +75,7 @@ export default definePluginEntry({ choiceLabel: "Standard API Key for Global/Intl (pay-as-you-go)", choiceHint: "Endpoint: dashscope-intl.aliyuncs.com", groupId: "modelstudio", - groupLabel: "Alibaba Cloud Model Studio", + groupLabel: "Qwen (Alibaba Cloud Model Studio)", groupHint: "Standard / Coding Plan (CN / Global)", }, }), @@ -102,7 +102,7 @@ export default definePluginEntry({ choiceLabel: "Coding Plan API Key for China (subscription)", choiceHint: "Endpoint: coding.dashscope.aliyuncs.com", groupId: "modelstudio", - groupLabel: "Alibaba Cloud Model Studio", + groupLabel: "Qwen (Alibaba Cloud Model Studio)", groupHint: "Standard / Coding Plan (CN / Global)", }, }), @@ -129,7 +129,7 @@ export default definePluginEntry({ choiceLabel: "Coding Plan API Key for Global/Intl (subscription)", choiceHint: "Endpoint: coding-intl.dashscope.aliyuncs.com", groupId: "modelstudio", - groupLabel: "Alibaba Cloud Model Studio", + groupLabel: "Qwen (Alibaba Cloud Model Studio)", groupHint: "Standard / Coding Plan (CN / Global)", }, }), diff --git a/extensions/modelstudio/openclaw.plugin.json b/extensions/modelstudio/openclaw.plugin.json index f1bcce0ff3e..af75b8ef426 100644 --- a/extensions/modelstudio/openclaw.plugin.json +++ b/extensions/modelstudio/openclaw.plugin.json @@ -12,7 +12,7 @@ "choiceLabel": "Standard API Key for China (pay-as-you-go)", "choiceHint": "Endpoint: dashscope.aliyuncs.com", "groupId": "modelstudio", - "groupLabel": "Alibaba Cloud Model Studio", + "groupLabel": "Qwen (Alibaba Cloud Model Studio)", "groupHint": "Standard / Coding Plan (CN / Global)", "optionKey": "modelstudioStandardApiKeyCn", "cliFlag": "--modelstudio-standard-api-key-cn", @@ -26,7 +26,7 @@ "choiceLabel": "Standard API Key for Global/Intl (pay-as-you-go)", "choiceHint": "Endpoint: dashscope-intl.aliyuncs.com", "groupId": "modelstudio", - "groupLabel": "Alibaba Cloud Model Studio", + "groupLabel": "Qwen (Alibaba Cloud Model Studio)", "groupHint": "Standard / Coding Plan (CN / Global)", "optionKey": "modelstudioStandardApiKey", "cliFlag": "--modelstudio-standard-api-key", @@ -40,7 +40,7 @@ "choiceLabel": "Coding Plan API Key for China (subscription)", "choiceHint": "Endpoint: coding.dashscope.aliyuncs.com", "groupId": "modelstudio", - "groupLabel": "Alibaba Cloud Model Studio", + "groupLabel": "Qwen (Alibaba Cloud Model Studio)", "groupHint": "Standard / Coding Plan (CN / Global)", "optionKey": "modelstudioApiKeyCn", "cliFlag": "--modelstudio-api-key-cn", @@ -54,7 +54,7 @@ "choiceLabel": "Coding Plan API Key for Global/Intl (subscription)", "choiceHint": "Endpoint: coding-intl.dashscope.aliyuncs.com", "groupId": "modelstudio", - "groupLabel": "Alibaba Cloud Model Studio", + "groupLabel": "Qwen (Alibaba Cloud Model Studio)", "groupHint": "Standard / Coding Plan (CN / Global)", "optionKey": "modelstudioApiKey", "cliFlag": "--modelstudio-api-key",