Added
- Slack Bot for AI Agent Interaction: New Slack bot integration enables interacting with the Dagu AI agent directly from Slack channels. (#1785)
- Telegram Bot for AI Agent Interaction: New Telegram bot integration enables interacting with the Dagu AI agent from Telegram. (#1783)
- Z.AI (GLM Models) as LLM Provider: Added Z.AI (GLM) as a supported LLM provider for the AI agent. (#1780)
- DAG-Level Retry Policy: New
retryPolicyfield on DAGs enables automatic retries with configurable max attempts, interval, and conditions. The scheduler scans for failed runs and auto-retries them based on the policy. (#1774) - DAG Auto-Retry Metadata in Run Lists: Auto-retry information (attempt number, remaining retries, original run ID) is now surfaced in DAG run list views. (#1779)
params[].evalfor DAG Param Defaults: DAG parameters now support anevalfield that evaluates an expression to compute the default value dynamically. (#1775)- Rich DAG Params with Typed Run Modal: DAG parameters now support inline type definitions (
type,default,options,description) rendered as typed controls (text, number, select, checkbox, textarea) in the run modal. (#1770) - Catchup Runs Through Enqueue Path: Catchup runs are now routed through the enqueue path with deterministic IDs, ensuring consistency with the normal scheduling flow. (#1772)
- Auto-Provision Initial Admin User: Initial admin user can now be provisioned via config (
auth.builtin.initial_admin) or environment variables (DAGU_AUTH_ADMIN_USERNAME,DAGU_AUTH_ADMIN_PASSWORD), enabling headless deployments without the/setuppage. (#1765) - Propagate Schedule Time Through DAG Run Lifecycle: The original schedule time is now preserved and propagated throughout the DAG run lifecycle, improving observability for scheduled runs. (#1763)
- Server-Side Sorting for Doc Tree Sidebar: The document tree sidebar now supports server-side sorting for consistent ordering. (#1759)
- HashiCorp Vault Integration: New secret provider for HashiCorp Vault, enabling DAGs to fetch secrets from Vault KV stores. (#1757) - Thanks to @dohq
- Multi-Select, Batch Delete & Keyboard Shortcuts for Doc Tree: The document tree now supports multi-select with Shift/Ctrl clicks, batch delete, and keyboard shortcuts for navigation. (#1756)
- Helm Chart Repository: Official Helm chart is now published to a Helm repository for easy Kubernetes deployment.
Fixed
- SSE Connection Stability: Hardened agent chat SSE transport and stabilized multiplexed SSE connection management to prevent dropped events, connection leaks, and improve reconnection reliability. (#1781, #1768)
- Graceful Shutdown for HTTP Server and Scheduler: Improved graceful shutdown handling to ensure in-flight requests complete and the scheduler stops cleanly. (#1782)
- DAG Env/Params in Container Env Variables: DAG-level
envandparamsreferences are now properly resolved in container environment variables. (#1778) - Thanks to @Popo8701 for reporting (#1776) - Terminal WebSocket Bridge Lifecycle: Hardened the terminal WebSocket bridge to properly clean up on disconnect and avoid stale connections. (#1777)
- False Positive Zombie Detector Kills: Eliminated false positive kills by the zombie detector that could terminate healthy running DAGs. (#1773)
- DAG Params Treated as Literal Values: DAG parameters are now treated as literal values without expansion, preventing unintended variable substitution. (#1767)
- AI Installer and Explicit Skills Dirs: Hardened the AI installer and added support for explicitly configured skill directories. (#1771)
- YAML Spec Workspace Tag at Enqueue: The workspace tag is now correctly saved in the YAML spec when enqueuing from the cockpit page. (#1758)
- onAbort Label in Lifecycle Hooks UI: The lifecycle hooks panel now correctly displays the
onAbortlabel instead of a missing label. (#1760) - Thanks to @SergioChan for the fix. Reported by @jeremydelattre59 (#1476) - JQ Step Raw Output for Large Numbers: Fixed raw output mode for the
jqstep type to correctly handle large numbers without scientific notation. (#1754) - Thanks to @tushar5526 for the fix. Reported by @insanity54 (#1648) - Step Name Limit Relaxed to 255 Characters: The step name character limit has been increased from 40 to 255 characters. (#1753) - Thanks to @SergioChan for the fix. Reported by @jonathonc (#1189)
- Docker Build Version: Removed git hash suffix from embedded version string in Docker builds.
Changed
- Rename Abort Handler to
onAbort: The abort handler contract has been renamed fromonAborthandler to use theonAbortlabel consistently across the codebase. (#1764)
Performance
- Queue Startup Lookup: Reduced queue startup lookup churn to lower memory usage and improve scheduler startup time. (#1769) - Thanks to @helmut72 for reporting (#546)
Helm Chart
- Publish official Helm chart repository.
- Align shared storage paths in Kubernetes. (#1766)
- Normalize Helm release metadata.
- Handle repeat chart release attempts.
- Rename Helm release tags.
Contributors
Thanks to our contributors for this release:
| Contribution | Contributor |
|---|---|
| HashiCorp Vault integration PR (#1757) | @dohq |
| onAbort label fix PR (#1760) | @SergioChan |
| Step name limit relaxed to 255 characters PR (#1753) | @SergioChan |
| JQ step raw output fix for large numbers PR (#1754) | @tushar5526 |
| Handler on abort display issue report (#1476) | @jeremydelattre59 |
| JQ large number formatting issue report (#1648) | @insanity54 |
| Step name character limit issue report (#1189) | @jonathonc |
| Container env variable resolution issue report (#1776) | @Popo8701 |
| Scheduler memory growth issue report (#546) | @helmut72 |
New Contributors
- @SergioChan made their first contribution in #1753
- @tushar5526 made their first contribution in #1754
- @dohq made their first contribution in #1757
Full Changelog: v2.2.4...v2.3.0