From 31ff5eefca80391009a6667c8410f7595e1df9ce Mon Sep 17 00:00:00 2001 From: viettranx Date: Tue, 17 Mar 2026 18:18:20 +0700 Subject: [PATCH] fix(tools): prevent duplicate media delivery from write_file Tell LLM that auto-delivered files should not be sent again via message tool, preventing double sends (document + photo) on Telegram. --- internal/tools/filesystem_write.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/tools/filesystem_write.go b/internal/tools/filesystem_write.go index c2d77de9..1f397ef4 100644 --- a/internal/tools/filesystem_write.go +++ b/internal/tools/filesystem_write.go @@ -173,7 +173,11 @@ func (t *WriteFileTool) Execute(ctx context.Context, args map[string]any) *Resul t.workspaceIntc.AfterWrite(ctx, resolved, "write") } - result := SilentResult(fmt.Sprintf("File written: %s (%d bytes)", path, len(content))) + msg := fmt.Sprintf("File written: %s (%d bytes)", path, len(content)) + if deliver { + msg += ". File will be automatically delivered to the user — do NOT send it again via message tool." + } + result := SilentResult(msg) result.Deliverable = content if deliver { result.Media = []bus.MediaFile{{Path: resolved}} @@ -191,7 +195,11 @@ func (t *WriteFileTool) executeInSandbox(ctx context.Context, path, content, san return ErrorResult(fmt.Sprintf("failed to write file: %v", err)) } - result := SilentResult(fmt.Sprintf("File written: %s (%d bytes)", path, len(content))) + msg := fmt.Sprintf("File written: %s (%d bytes)", path, len(content)) + if deliver { + msg += ". File will be automatically delivered to the user — do NOT send it again via message tool." + } + result := SilentResult(msg) result.Deliverable = content if deliver { // Sandbox workspace is bind-mounted — resolve to host path for delivery