v2.7.1 — image edit improvements, search config, bug fixes

image_edit:
- speech_bubble operation with Korean font, rounded rect, tail
- sketch quality: CLAHE pre-processing for better line contrast
- output filename with timestamp to prevent overwrites
- anime/painting stylize timeout 30s→600s (AnimeGANv2 model download)
- remove_bg PNG output fix

server-v2.ts:
- resolveToolImageContent: embed edited image as base64 in tool results
  so vision models can see the output (3 execution paths covered)
- _activeModelName: fix vision support detection for Ollama-hosted models
  (kimi/gemini run via Ollama — provider='ollama' was masking vision capability)
- Synthetic tool call ID generation to prevent Gemini function_response empty name error
- image_edit path hint format changed to English to prevent Gemini hallucination
- userRequestedImageEdit: expanded keyword list (풍선, 달아, 붙여 등)
- image_read OCR failure returns success:true with visual description hint
- TOOL_BLOCKS photo: image_edit workflow documentation updated

web-ui/index.html:
- renderFileDownloads: skip download buttons for image file extensions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kim
2026-05-18 22:03:32 +09:00
co-authored by Claude Sonnet 4.6
parent 34932ac50a
commit 245606252e
15 changed files with 1693 additions and 79 deletions
+3 -1
View File
@@ -6,6 +6,8 @@ import { log } from '../security/log-scrubber.js';
export interface ShellToolArgs {
command: string;
cwd?: string;
_workspacePath?: string;
_workspace?: string;
}
// ── Path confinement helper ───────────────────────────────────────────────────
@@ -56,7 +58,7 @@ function containsOutOfScopeAbsPath(command: string, workspacePath: string): bool
export async function executeShell(args: ShellToolArgs): Promise<ToolResult> {
const config = getConfig().getConfig();
const permissions = config.tools.permissions.shell;
const workspacePath = path.resolve(config.workspace.path);
const workspacePath = path.resolve(args._workspacePath || args._workspace || config.workspace.path);
// Determine and resolve working directory
const cwd = path.resolve(args.cwd ? args.cwd : workspacePath);