# Changelog All notable changes to this project will be documented in this file. ## [0.2.4] - 2026-04-21 ### Changed - `redeploy_project`: Replaced broken `SYNO.Docker.Image/pull` with a delete-before-start workaround. The tool now reads image tags from the project's compose file via FileStation, deletes each cached image before calling `start` (so DSM auto-pulls the latest version), then polls for `RUNNING`. Image deletion is non-fatal — if it fails the project still starts. Unified 4-step flow for all project states (RUNNING, STOPPED, BUILD_FAILED). ### Added - `update_image_tag`: Auto-updates environment variables whose value equals the numeric version prefix of the old tag when the new tag shares the same `-` pattern. For example, changing `2.558-jdk21` → `2.560-jdk21` automatically updates `JENKINS_VERSION=2.558` to `JENKINS_VERSION=2.560`. The preview (unconfirmed call) now lists which env vars will be updated. Only triggers when the variable exists and the pattern matches; no change for plain tags like `latest`. ## [0.2.3] - 2026-04-21 ### Changed - `CLAUDE.md` rewritten: removed all operator-specific infrastructure details (hostnames, container names, image tags, personal notes). Kept DSM API quirks, implementation rules, and tool inventory. ## [0.2.2] - 2026-04-21 ### Fixed - `redeploy_project` (BUILD_FAILED): Pull errors are no longer silently suppressed. If the image pull fails (e.g. the tag in compose.yaml does not exist on the registry), redeploy aborts immediately with a clear message pointing to `update_image_tag`. ## [0.2.1] - 2026-04-21 ### Fixed - `redeploy_project`: After issuing `start`, the tool now polls the project status every 2 seconds for up to 30 seconds until the project reaches `RUNNING`. Previously DSM returned immediately while containers were still starting, causing the project to appear as `exited` when checked right after redeploy. On timeout a warning is returned instead of an error. - `delete_image`: Now distinguishes between running and stopped container references. A stopped container holding the image produces a clear hint to use `delete_container` or `system_prune` instead of a generic "in use" error. - `redeploy_project` (BUILD_FAILED path): Added explicit image pull step before restart (`stop → pull → start`). Previously the old cached image could be reused. ### Added - `delete_container` — delete a stopped container by name; refuses if container is still running; requires `confirmed=True`. ## [0.2.0] - 2026-04-14 ### Added **Images** - `list_images` — list local images sorted by size; marks images in use and with available updates - `delete_image` — delete image by `name:tag` or hash; refuses if image is used by a container **Container** - `container_stats` — live CPU %, RAM used/limit, network I/O, block I/O **System** - `system_df` — Docker disk usage: image count/size, running/stopped containers, reclaimable space - `system_prune` — remove dangling images, stopped containers, and unused networks **Networks** - `list_networks` — list all Docker networks with driver, subnet, gateway, attached containers - `create_network` — create a new bridge (or other driver) network - `delete_network` — delete a network; refuses if any container is still attached ### Fixed - `get_container_status` now reads the correct DSM response fields (`details.State` for status/running, `profile.image` for image name) and displays IP addresses, port bindings, and mounts - `redeploy_project` is now status-aware: RUNNING → stop + start; STOPPED → start directly; BUILD_FAILED → force-stop + start; unknown status returns a clear error with workaround hint - Container names with hash prefix (e.g. `f93cb8b504f7_jenkins`) are now transparently stripped in `list_containers`, `container_stats`, `get_container_status`, `get_container_logs`, and `exec_in_container` ### Changed - `DsmClient` gained a `post_request()` method for form-encoded POST operations required by image delete, network create/delete ## [0.1.0] - 2026-04-13 ### Added - Initial implementation - **Projects**: `list_projects`, `get_project_status`, `start_project`, `stop_project`, `redeploy_project` - **Containers**: `list_containers`, `get_container_status`, `get_container_logs`, `exec_in_container` - **Compose**: `read_compose`, `update_compose`, `update_image_tag`, `update_env_var` - **Images**: `check_image_updates` - DSM session management with auto re-authentication on session timeout - OS keyring integration for secure credential storage - 2FA / device token support - Interactive `setup` wizard and `check` connectivity command