惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
博客园 - 【当耐特】
D
Docker
Y
Y Combinator Blog
L
LangChain Blog
博客园 - 三生石上(FineUI控件)
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
B
Blog
The GitHub Blog
The GitHub Blog
腾讯CDC
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
爱范儿
爱范儿
A
About on SuperTechFans
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix(web-search): include MiniMax in setup detection · ope...
steipete · 2026-05-02 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -25,6 +25,7 @@ Docs: https://docs.openclaw.ai

2525
2626

- Feishu: preserve Feishu/Lark HTTP error bodies for message sends, media sends, and chat member lookups, so HTTP 400 failures include vendor code, message, log id, and troubleshooter details. Fixes #73860. Thanks @desksk.

2727

- Agents/transcripts: avoid reopening large Pi transcript files through the synchronous session manager for maintenance rewrites, persisted tool-result truncation, manual compaction boundary hardening, and queued compaction rotation. Thanks @mariozechner.

28+

- Web search/MiniMax: include MiniMax Search in the web-search setup flow and let `MINIMAX_API_KEY` participate in MiniMax Search auto-detection. Supersedes #65828. Thanks @Jah-yee.

2829

- Telegram: inherit the process DNS result order for Bot API transport and downgrade recovered sticky IPv4 fallback promotions to debug logs, while keeping pinned-IP escalation warnings visible. Fixes #75904. Thanks @highfly-hi and @neeravmakwana.

2930

- Web search/MiniMax: allow `MINIMAX_OAUTH_TOKEN` to satisfy MiniMax Search credentials, so OAuth-authorized MiniMax Token Plan setups do not need a separate web-search key. Fixes #65768. Thanks @kikibrian and @zhouhe-xydt.

3031

- Providers/MiniMax: derive Coding Plan usage polling from the configured MiniMax base URL, so global setups no longer query the CN usage host. Fixes #65054. Thanks @sixone74 and @Yanhu007.

Original file line numberDiff line numberDiff line change

@@ -29,9 +29,10 @@ snippets, and related queries.

2929

</Step>

3030

</Steps>

3131
32-

OpenClaw also accepts `MINIMAX_CODING_API_KEY` and `MINIMAX_OAUTH_TOKEN` as env

33-

aliases. `MINIMAX_API_KEY` is still read as a compatibility fallback when it

34-

already points at a token-plan credential.

32+

OpenClaw also accepts `MINIMAX_CODING_API_KEY`, `MINIMAX_OAUTH_TOKEN`, and

33+

`MINIMAX_API_KEY` as env aliases. `MINIMAX_API_KEY` should point at a

34+

search-enabled Token Plan credential; ordinary MiniMax model API keys may not

35+

be accepted by the Token Plan search endpoint.

3536
3637

## Config

3738

@@ -59,8 +60,8 @@ already points at a token-plan credential.

5960

}

6061

```

6162
62-

**Environment alternative:** set `MINIMAX_CODE_PLAN_KEY` or `MINIMAX_OAUTH_TOKEN`

63-

in the Gateway environment.

63+

**Environment alternative:** set `MINIMAX_CODE_PLAN_KEY`, `MINIMAX_CODING_API_KEY`,

64+

`MINIMAX_OAUTH_TOKEN`, or `MINIMAX_API_KEY` in the Gateway environment.

6465

For a gateway install, put it in `~/.openclaw/.env`.

6566
6667

## Region selection

Original file line numberDiff line numberDiff line change

@@ -164,7 +164,7 @@ first one that is ready:

164164

API-backed providers first:

165165
166166

1. **Brave** -- `BRAVE_API_KEY` or `plugins.entries.brave.config.webSearch.apiKey` (order 10)

167-

2. **MiniMax Search** -- `MINIMAX_CODE_PLAN_KEY` / `MINIMAX_CODING_API_KEY` / `MINIMAX_OAUTH_TOKEN` or `plugins.entries.minimax.config.webSearch.apiKey` (order 15)

167+

2. **MiniMax Search** -- `MINIMAX_CODE_PLAN_KEY` / `MINIMAX_CODING_API_KEY` / `MINIMAX_OAUTH_TOKEN` / `MINIMAX_API_KEY` or `plugins.entries.minimax.config.webSearch.apiKey` (order 15)

168168

3. **Gemini** -- `plugins.entries.google.config.webSearch.apiKey`, `GEMINI_API_KEY`, or `models.providers.google.apiKey` (order 20)

169169

4. **Grok** -- `XAI_API_KEY` or `plugins.entries.xai.config.webSearch.apiKey` (order 30)

170170

5. **Kimi** -- `KIMI_API_KEY` / `MOONSHOT_API_KEY` or `plugins.entries.moonshot.config.webSearch.apiKey` (order 40)

Original file line numberDiff line numberDiff line change

@@ -246,7 +246,13 @@ describe("minimax provider hooks", () => {

246246

expect(webSearchProviders[0]).toMatchObject({

247247

id: "minimax",

248248

label: "MiniMax Search",

249-

envVars: ["MINIMAX_CODE_PLAN_KEY", "MINIMAX_CODING_API_KEY", "MINIMAX_OAUTH_TOKEN"],

249+

onboardingScopes: ["text-inference"],

250+

envVars: [

251+

"MINIMAX_CODE_PLAN_KEY",

252+

"MINIMAX_CODING_API_KEY",

253+

"MINIMAX_OAUTH_TOKEN",

254+

"MINIMAX_API_KEY",

255+

],

250256

});

251257

});

252258
Original file line numberDiff line numberDiff line change

@@ -9,6 +9,7 @@ const MINIMAX_TOKEN_PLAN_ENV_VARS = [

99

"MINIMAX_CODING_API_KEY",

1010

"MINIMAX_OAUTH_TOKEN",

1111

] as const;

12+

const MINIMAX_WEB_SEARCH_ENV_VARS = [...MINIMAX_TOKEN_PLAN_ENV_VARS, "MINIMAX_API_KEY"] as const;

1213
1314

type MiniMaxWebSearchRuntime = typeof import("./minimax-web-search-provider.runtime.js");

1415

@@ -37,8 +38,9 @@ export function createMiniMaxWebSearchProvider(): WebSearchProviderPlugin {

3738

id: "minimax",

3839

label: "MiniMax Search",

3940

hint: "Structured results via MiniMax Token Plan search API",

41+

onboardingScopes: ["text-inference"],

4042

credentialLabel: "MiniMax Token Plan key or OAuth token",

41-

envVars: [...MINIMAX_TOKEN_PLAN_ENV_VARS],

43+

envVars: [...MINIMAX_WEB_SEARCH_ENV_VARS],

4244

placeholder: "sk-cp-...",

4345

signupUrl: "https://platform.minimax.io/user-center/basic-information/interface-key",

4446

docsUrl: "https://docs.openclaw.ai/tools/minimax-search",

Original file line numberDiff line numberDiff line change

@@ -8,6 +8,7 @@ const MINIMAX_TOKEN_PLAN_ENV_VARS = [

88

"MINIMAX_CODING_API_KEY",

99

"MINIMAX_OAUTH_TOKEN",

1010

] as const;

11+

const MINIMAX_WEB_SEARCH_ENV_VARS = [...MINIMAX_TOKEN_PLAN_ENV_VARS, "MINIMAX_API_KEY"] as const;

1112
1213

export function createMiniMaxWebSearchProvider(): WebSearchProviderPlugin {

1314

const credentialPath = "plugins.entries.minimax.config.webSearch.apiKey";

@@ -16,8 +17,9 @@ export function createMiniMaxWebSearchProvider(): WebSearchProviderPlugin {

1617

id: "minimax",

1718

label: "MiniMax Search",

1819

hint: "Structured results via MiniMax Token Plan search API",

20+

onboardingScopes: ["text-inference"],

1921

credentialLabel: "MiniMax Token Plan key or OAuth token",

20-

envVars: [...MINIMAX_TOKEN_PLAN_ENV_VARS],

22+

envVars: [...MINIMAX_WEB_SEARCH_ENV_VARS],

2123

placeholder: "sk-cp-...",

2224

signupUrl: "https://platform.minimax.io/user-center/basic-information/interface-key",

2325

docsUrl: "https://docs.openclaw.ai/tools/minimax-search",

Original file line numberDiff line numberDiff line change

@@ -28,6 +28,17 @@ const SEARCH_PROVIDER_PLUGINS: Record<

2828

label: "Kimi",

2929

credentialLabel: "Moonshot / Kimi API key",

3030

},

31+

minimax: {

32+

pluginId: "minimax",

33+

envVars: [

34+

"MINIMAX_CODE_PLAN_KEY",

35+

"MINIMAX_CODING_API_KEY",

36+

"MINIMAX_OAUTH_TOKEN",

37+

"MINIMAX_API_KEY",

38+

],

39+

label: "MiniMax Search",

40+

credentialLabel: "MiniMax Token Plan key or OAuth token",

41+

},

3142

perplexity: {

3243

pluginId: "perplexity",

3344

envVars: ["PERPLEXITY_API_KEY", "OPENROUTER_API_KEY"],

@@ -110,7 +121,7 @@ function createSearchProviderEntry(id: string): PluginWebSearchProviderEntry {

110121
111122

const searchProviderFixture = vi.hoisted(() => ({

112123

resolvePluginWebSearchProviders: vi.fn(() =>

113-

["brave", "firecrawl", "gemini", "grok", "kimi", "perplexity", "tavily"].map((id) =>

124+

["brave", "firecrawl", "gemini", "grok", "kimi", "minimax", "perplexity", "tavily"].map((id) =>

114125

createSearchProviderEntry(id),

115126

),

116127

),

@@ -135,6 +146,10 @@ const SEARCH_PROVIDER_ENV_VARS = [

135146

"GOOGLE_API_KEY",

136147

"KIMI_API_KEY",

137148

"MOONSHOT_API_KEY",

149+

"MINIMAX_API_KEY",

150+

"MINIMAX_CODE_PLAN_KEY",

151+

"MINIMAX_CODING_API_KEY",

152+

"MINIMAX_OAUTH_TOKEN",

138153

"OPENROUTER_API_KEY",

139154

"PERPLEXITY_API_KEY",

140155

"TAVILY_API_KEY",

@@ -652,6 +667,7 @@ describe("setupSearch", () => {

652667

"gemini",

653668

"grok",

654669

"kimi",

670+

"minimax",

655671

"perplexity",

656672

"tavily",

657673

]),

Original file line numberDiff line numberDiff line change

@@ -76,7 +76,12 @@ const mockWebSearchProviders = [

7676

{

7777

id: "minimax",

7878

pluginId: "minimax",

79-

envVars: ["MINIMAX_CODE_PLAN_KEY", "MINIMAX_CODING_API_KEY", "MINIMAX_OAUTH_TOKEN"],

79+

envVars: [

80+

"MINIMAX_CODE_PLAN_KEY",

81+

"MINIMAX_CODING_API_KEY",

82+

"MINIMAX_OAUTH_TOKEN",

83+

"MINIMAX_API_KEY",

84+

],

8085

credentialPath: "plugins.entries.minimax.config.webSearch.apiKey",

8186

getCredentialValue: getScopedWebSearchCredential("minimax"),

8287

getConfiguredCredentialValue: getConfiguredPluginWebSearchCredential("minimax"),

@@ -456,6 +461,11 @@ describe("web search provider auto-detection", () => {

456461

expect(resolveSearchProvider({})).toBe("tavily");

457462

});

458463
464+

it("auto-detects minimax when only MINIMAX_API_KEY is set", () => {

465+

process.env.MINIMAX_API_KEY = "test-minimax-key"; // pragma: allowlist secret

466+

expect(resolveSearchProvider({})).toBe("minimax");

467+

});

468+
459469

it("auto-detects firecrawl when only FIRECRAWL_API_KEY is set", () => {

460470

process.env.FIRECRAWL_API_KEY = "fc-test-key"; // pragma: allowlist secret

461471

expect(resolveSearchProvider({})).toBe("firecrawl");

Original file line numberDiff line numberDiff line change

@@ -20,6 +20,7 @@ for (const providerId of [

2020

"exa",

2121

"firecrawl",

2222

"google",

23+

"minimax",

2324

"moonshot",

2425

"perplexity",

2526

"tavily",