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

推荐订阅源

D
Docker
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
腾讯CDC
B
Blog RSS Feed
H
Help Net Security
J
Java Code Geeks
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
博客园_首页
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
博客园 - Franky
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 叶小钗
Martin Fowler
Martin Fowler

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: defer image tool auto discovery · openclaw/openclaw@...
shakkernerd · 2026-05-02 · via Recent Commits to openclaw:main

@@ -379,22 +379,37 @@ export function createImageTool(options?: {

379379

fsPolicy?: ToolFsPolicy;

380380

/** If true, the model has native vision capability and images in the prompt are auto-injected */

381381

modelHasVision?: boolean;

382+

/**

383+

* Avoid resolving auto image-provider/model candidates while registering the

384+

* tool. The concrete image model is still resolved before execution.

385+

*/

386+

deferAutoModelResolution?: boolean;

382387

}): AnyAgentTool | null {

383388

const agentDir = options?.agentDir?.trim();

389+

const explicit = coerceImageModelConfig(options?.config);

384390

if (!agentDir) {

385-

const explicit = coerceImageModelConfig(options?.config);

386391

if (hasToolModelConfig(explicit)) {

387392

throw new Error("createImageTool requires agentDir when enabled");

388393

}

389394

return null;

390395

}

391-

const imageModelConfig = resolveImageModelConfigForTool({

392-

cfg: options?.config,

393-

agentDir,

394-

workspaceDir: options?.workspaceDir,

395-

authStore: options?.authProfileStore,

396-

});

397-

if (!imageModelConfig) {

396+

const explicitImageModelConfig = hasToolModelConfig(explicit)

397+

? resolveConfiguredImageModelRefs({

398+

cfg: options?.config,

399+

imageModelConfig: explicit,

400+

})

401+

: null;

402+

const shouldResolveAutoImageModel =

403+

!explicitImageModelConfig && !options?.deferAutoModelResolution;

404+

const resolvedImageModelConfig = shouldResolveAutoImageModel

405+

? resolveImageModelConfigForTool({

406+

cfg: options?.config,

407+

agentDir,

408+

workspaceDir: options?.workspaceDir,

409+

authStore: options?.authProfileStore,

410+

})

411+

: explicitImageModelConfig;

412+

if (!resolvedImageModelConfig && !options?.deferAutoModelResolution) {

398413

return null;

399414

}

400415

const remoteMediaSsrfPolicy = resolveRemoteMediaSsrfPolicy(options?.config);

@@ -403,7 +418,9 @@ export function createImageTool(options?: {

403418

// so this tool is only needed when image wasn't provided in the prompt

404419

const description = options?.modelHasVision

405420

? "Analyze one or more images with a vision model. Use image for a single path/URL, or images for multiple (up to 20). Only use this tool when images were NOT already provided in the user's message. Images mentioned in the prompt are automatically visible to you."

406-

: "Analyze one or more images with the configured image model (agents.defaults.imageModel). Use image for a single path/URL, or images for multiple (up to 20). Provide a prompt describing what to analyze.";

421+

: explicitImageModelConfig

422+

? "Analyze one or more images with the configured image model (agents.defaults.imageModel). Use image for a single path/URL, or images for multiple (up to 20). Provide a prompt describing what to analyze."

423+

: "Analyze one or more images with an available vision model. Use image for a single path/URL, or images for multiple (up to 20). Provide a prompt describing what to analyze.";

407424408425

return {

409426

label: "Image",

@@ -603,6 +620,19 @@ export function createImageTool(options?: {

603620

}

604621605622

// MARK: - Run image prompt with all loaded images

623+

const imageModelConfig =

624+

resolvedImageModelConfig ??

625+

resolveImageModelConfigForTool({

626+

cfg: options?.config,

627+

agentDir,

628+

workspaceDir: options?.workspaceDir,

629+

authStore: options?.authProfileStore,

630+

});

631+

if (!imageModelConfig) {

632+

throw new Error(

633+

"No image model is configured. Set agents.defaults.imageModel or configure an image-capable provider.",

634+

);

635+

}

606636

const result = await runImagePrompt({

607637

cfg: options?.config,

608638

agentDir,