Skip to content

File tools (upload/create folder/move/copy/delete) always report success, even when the WebDAV request fails #242

Description

@poramet-lab

Version: context_agent 2.8.0

Steps to reproduce

  1. Ask the agent: "Create a file named test.md in folder /does-not-exist with content: hello", approve the action.
  2. The agent answers "I have successfully created the file…" but no file exists (the WebDAV PUT returned an error because the parent folder is missing).

Cause: ex_app/lib/all_tools/files.py — upload_file, create_folder, move_file, copy_file, delete_file send the request and
return {"status": "success", ...} without looking at response.status_code. The model then tells the user the action succeeded.

Impact: users are told work was done when it was not (silent data loss / false confirmation).

Fix (tested): check the status code and return an error object for non-2xx so the model reports the failure. Patch below.

Patch (tested on a test instance):

--- a/ex_app/lib/all_tools/files.py
+++ b/ex_app/lib/all_tools/files.py
@@ -21,6 +21,14 @@
 	return path
 
 
+def _dav_error(response):
+	"""Return an error dict if the WebDAV request did not succeed (non-2xx), otherwise None."""
+	code = getattr(response, 'status_code', None)
+	if code is None or code >= 300:
+		return {"status": "error", "http_status": code, "message": "The WebDAV request failed. Nothing was changed. Tell the user it did not work."}
+	return None
+
+
 async def get_tools(nc: AsyncNextcloudApp):
 
 	@tool
@@ -160,6 +168,9 @@
 			"Content-Type": "text/plain",
 		}, data=content)
 
+		err = _dav_error(response)
+		if err:
+			return err
 		return {"status": "success", "path": path}
 
 	@tool
@@ -177,6 +188,9 @@
 			"Content-Type": "application/json",
 		})
 
+		err = _dav_error(response)
+		if err:
+			return err
 		return {"status": "success", "path": path}
 
 	@tool
@@ -196,6 +210,9 @@
 			"Destination": f"{nc.app_cfg.endpoint}/remote.php/dav/files/{user_id}/{destination_path}",
 		})
 
+		err = _dav_error(response)
+		if err:
+			return err
 		return {"status": "success", "from": source_path, "to": destination_path}
 
 	@tool
@@ -215,6 +232,9 @@
 			"Destination": f"{nc.app_cfg.endpoint}/remote.php/dav/files/{user_id}/{destination_path}",
 		})
 
+		err = _dav_error(response)
+		if err:
+			return err
 		return {"status": "success", "from": source_path, "to": destination_path}
 
 	@tool
@@ -348,6 +368,9 @@
 			"Content-Type": "application/json",
 		})
 
+		err = _dav_error(response)
+		if err:
+			return err
 		return {"status": "success", "deleted": path}
 
 	return [

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions