File tools (upload/create folder/move/copy/delete) always report success, even when the WebDAV request fails
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 85/100
Línea de trabajo
Empieza en ex_app/lib/all_tools/files.py revisando upload_file, create_folder, move_file, copy_file y delete_file junto con sus respuestas de WebDAV. Reproduce el caso de una carpeta principal inexistente o inspecciona primero el manejo de las solicitudes existente. La tarea estará completa cuando toda respuesta que no sea 2xx se notifique como un error y las operaciones exitosas sigan notificándose como exitosas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Version: context_agent 2.8.0
Steps to reproduce
- Ask the agent: "Create a file named test.md in folder /does-not-exist with content: hello", approve the action.
- 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 [
- Lenguaje dominante
- Python
- Estrellas
- 24
- Forks
- 16
- Merge medio
- 7 d 15 h
- PR fusionados (30 d)
- 4
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nextcloud/context_agent
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
nextcloud/context_agent#240 ·
-
find_person_in_contacts fails with Niquests content argument and cannot serialize vCard AddressAbiertobug
Dificultad 2/5 Medio día Aptitud para principiantes 76/100
nextcloud/context_agent#217 · 3 comentarios ·
-
enhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
nextcloud/context_agent#241 ·
-
list skills toolAbiertoenhancement priority normal
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
nextcloud/context_agent#239 · 2 comentarios · 1 reacción ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 67/100
nextcloud/context_agent#231 · 2 comentarios ·
Todos los issues de nextcloud/context_agent
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-2 días Aptitud para principiantes 70/100
-
FingerprintSplitter raises ZeroDivisionError when int(frac_train * len(dataset)) floors to zeroAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 7 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
lmstudio-ai/mlx-engine#376 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
pyiron/bagofholding#166 ·