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

推荐订阅源

H
Help Net Security
腾讯CDC
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
V
V2EX
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
量子位
F
Fortinet All Blogs
G
Google Developers Blog
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
J
Java Code Geeks
S
SegmentFault 最新的问题
D
Docker
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
M
MIT News - Artificial intelligence
博客园 - 【当耐特】

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,