github dagucloud/dagu v2.22.0

3 hours ago

Highlights

v2.22 connects harness.run to ACP agents, adds a local command notification channel, and adds time-of-day gates to wait.until. Dagu Console can now show why runs failed and reach self-hosted servers over MCP. Binaries are built with Go 1.27.3 to distrust compromised eMudhra CAs.

  • Upgrade notes:
    • Requests that need no login (auth.mode: none, and POST /api/v1/auth/setup) now get HTTP 400 for an unrecognized Host. Add public or custom domains to allowed_hosts / DAGU_ALLOWED_HOSTS. IP addresses, localhost, and the configured host and public_url are always allowed (#3232).
    • Workspace settings are deprecated and will be removed in v3.0. The server logs the settings in use and admins see a notice. Feedback: #3288 (#3282).
  • Security: Go 1.27.3 (CVE-2026-111943) refuses TLS chains through eight eMudhra intermediate CAs whose private keys are recoverable (#3275).
  • Harness: harness.run talks to ACP agents over stdio, WebSocket, or Streamable HTTP (#3256).
  • Notifications: a command channel runs a local shell command when a rule matches. Run values reach it only as environment variables (#3157, #3235).
  • wait.until: HH:MM[:SS] clock times with offset, timezone, and if_past (#3248). Value references resolve at run time (#3236).
  • Dagu Console: a new errors report level sends the error messages of failed steps (#3254, #3266). With cloud.remote_access on, AI apps connected to Dagu Cloud can call a self-hosted server's MCP endpoint, even behind NAT (#3276). Connecting with the 14-day trial takes one step (#3287).
  • Scheduler and sync: scheduler.wake_hold holds the first tick after the host wakes from sleep (#3270). Git Sync pull removes DAGs and Wiki pages deleted upstream (#3278).
  • Upgrades: the banner asks for a restart once a new binary is installed and shows the update command for the install method: dagu upgrade, Homebrew, Snap, or go install (#3289).

Added

  • feat: add a local command notification channel (#3157) @kriyanshii
  • feat(harness): support ACP agents over stdio, WebSocket, and HTTP (#3256) @100apps

Changed

Fixed

  • telemetry: send /v1/traces endpoints to the OTLP/HTTP exporter (#3213) @SCcagg5
  • file: check the record lock before a compare-and-write (#3224) @SCcagg5
  • Keep SSE topic polling alive on bad input (#3231) @yohamta0
  • Keep cmd.exe from reparsing harness prompts (#3233) @yohamta0
  • xlsx: write update_rows and append results to an output workbook (#3239) @ybai08
  • fix(value): import core PowerShell modules before a substitution (#3242) @ReguiguiMohamed
  • ui: send the login page to the dashboard without built-in auth (#3247) @SCcagg5
  • runtime: skip fsync for non-regular step redirects (#3264) @dagomez137
  • Offer error messages to servers at run status (#3266) @yohamta0
  • Fix tool installs from custom registries rejected by aqua's default policy (#3267) @100apps
  • Report scheduled DAGs and what came of their slots (#3269) @yohamta0
  • scheduler: hold the first tick after the host wakes from sleep (#3270) @yohamta0
  • Decide waiting steps through dagu_execute (#3273) @yohamta0
  • Remove remotely deleted DAGs and Wiki pages on Git Sync pull (#3278) @yohamta0
  • dagrun: read the latest status from the end of its file (#3280) @yohamta0
  • Validate child params when dag.run passes none (#3281) @yohamta0

Contributors

Thanks to our contributors for this release:

Contribution Contributor
feat(harness): support ACP agents over stdio, WebSocket, and HTTP (#3256), Fix tool installs from custom registries rejected by aqua's default policy (#3267) @100apps
workbook: create the output folder for xlsx.write_cells (#3265) @MitchelTighe
fix(value): import core PowerShell modules before a substitution (#3242) @ReguiguiMohamed
Allow while and until repeat without a condition (#3255) @RyoKusnadi
telemetry: send /v1/traces endpoints to the OTLP/HTTP exporter (#3213), http: leave status_code and headers out of silent JSON output (#3215), runtime: pass the step span to step processes as TRACEPARENT (#3216), file: check the record lock before a compare-and-write (#3224), ui: send the login page to the dashboard without built-in auth (#3247) @SCcagg5
bug: otel.endpoint ending in /v1/traces is exported over gRPC instead of OTLP/HTTP (#3204), bug: http.request with format: json and silent: true prints status_code 0 and headers null (#3205), feat: pass the step span to step processes as TRACEPARENT and TRACESTATE (#3206) @SCcagg5 (report)
runtime: skip fsync for non-regular step redirects (#3264) @dagomez137
wait: defer strict validation for value references to run time (#3236), wait.until: native time-of-day gates (offset, timezone, if_past) (#3248) @ianwalkeruk
feat: allow value-resolution in wait.until (build-time validation rejects references) (#3226) @ianwalkeruk (report)
feat: add a local command notification channel (#3157) @kriyanshii
bug: sync from git (#3277) @sashok60 (report)
xlsx: write update_rows and append results to an output workbook (#3239) @ybai08

New Contributors

Full Changelog: v2.21.0...v2.22.0

Don't miss a new dagu release

NewReleases is sending notifications on new releases.