mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-21 00:02:30 +00:00
A poll with no row to resume from sent no cursor at all, and the messages endpoint answers that with the newest page rather than the oldest, so the rows before it were never read and the sweep dropped the temp rows covering them. Sequences start at 1, so reading from 0 puts every request on the forward branch. A read that stops at the request cap is now kept: each batch is a run of rows from the cursor, so the next tick carries on from where it stopped. The last poll of a turn has no tick after it, and there its prefix is dropped instead, since it would sit beside the temp rows showing the turn's start twice. `startPolling` armed a two-minute timeout it never held onto, and `stopPolling` cleared only the interval. A turn ending inside two minutes left the timeout armed to fire into the next turn on the same conversation and stop its polling part-way, which a non-streaming turn feels as intermediate rows drying up. The handle now lives on the turn's runtime and is cleared with the interval. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Windmill frontend
The Windmill frontend written in Svelte 5 + Tailwind CSS
The frontend is under AGPL, see the LICENSE file at the root of this repo