diff --git a/dev/issues/README.md b/dev/issues/README.md index 93b3bea..c4747fb 100644 --- a/dev/issues/README.md +++ b/dev/issues/README.md @@ -41,5 +41,5 @@ afectados y notas de implementacion. | 28 | Desacoplar launcher del registro | [0028-decouple-launcher.md](completed/0028-decouple-launcher.md) | completado | | 29 | Tests para runtime y config | [0029-core-tests.md](0029-core-tests.md) | pendiente | | 30 | Separacion Robot vs Agente | [0030-robot-vs-agent.md](0030-robot-vs-agent.md) | pendiente | -| 31 | Expandir tools/file/ | [0031-expand-file-tools.md](0031-expand-file-tools.md) | pendiente | +| 31 | Expandir file tools (write, list, append, delete) | [0031-expand-file-tools.md](completed/0031-expand-file-tools.md) | completado | | 32 | E2E: verificar skill /create-agent | [0032-e2e-create-agent-skill.md](0032-e2e-create-agent-skill.md) | pendiente | diff --git a/dev/issues/completed/0031-expand-file-tools.md b/dev/issues/completed/0031-expand-file-tools.md new file mode 100644 index 0000000..b6a0145 --- /dev/null +++ b/dev/issues/completed/0031-expand-file-tools.md @@ -0,0 +1,32 @@ +# 0031 — Expandir tools/file/ con write, list, append, delete + +## Objetivo + +Ampliar el paquete `tools/file/` con operaciones de escritura, listado, append y borrado. Mantener el patron deny-by-default, validacion de symlinks, y respetar el flag `read_only` del config. + +## Estado: completado + +Implementado en rama `issue/0031-expand-file-tools`. + +### Archivos creados/modificados + +- `tools/file/validate.go` — NEW: validatePath(), validateWritePath(), resolveReal() extraidos de file.go +- `tools/file/write.go` — NEW: write_file tool (crea/sobreescribe, MkdirAll, limite 1MB) +- `tools/file/list.go` — NEW: list_directory tool (plano/recursivo, limite 500 entries) +- `tools/file/append.go` — NEW: append_file tool (append o crear, limite 10MB total) +- `tools/file/delete.go` — NEW: delete_file tool (solo archivos, nunca directorios) +- `tools/file/file.go` — refactored: removidas funciones movidas a validate.go +- `tools/file/write_test.go` — NEW: 11 tests +- `tools/file/list_test.go` — NEW: 9 tests +- `tools/file/append_test.go` — NEW: 11 tests +- `tools/file/delete_test.go` — NEW: 9 tests +- `agents/runtime.go` — registro condicional de las 4 tools nuevas + +### Seguridad + +- Deny-by-default en todas las tools (AllowedPaths vacio = todo denegado) +- ReadOnly gate: write/append/delete solo se registran si ReadOnly == false +- Path traversal protegido via resolveReal() + prefix validation +- Symlink escape protegido via EvalSymlinks +- Solo archivos en delete (nunca directorios) +- Limites de tamano: 1MB write, 10MB append total, 64KB read output, 500 entries list