* feat: run turns in several flow chat conversations at once
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep finished turns finished and cached chats current in the flow chat pool
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: attribute a turn's rows by job id as well as sequence
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: count only real stream updates and retry the job-id read
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep a chat that holds an unsent draft, and take one back when its first turn is withdrawn
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: ignore a stale running-turn snapshot, keep a withdrawn chat's draft, poll after clean stream ends
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: follow the turn running now when the listing named one already over
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep replacement turns and SSE fallback moving
* fix: keep replacement turn handoffs active
* fix: preserve unread badge line height
* fix: settle local fallback handoffs
* fix: settle refused turn handoffs
* fix: scope turn handoffs to conversation
* fix: drop stale turn handoffs
* refactor: move the queued message and 409 handling into per-conversation turns
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: address cubic's review of the parallel flow chat turns
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: clear a stale failure on refresh, and tighten the docs and test waits
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: recover running rows past the first page, and drop the failure a re-read disproves
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: check the running-turn query at compile time, and narrow what a refresh clears
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: settle a failed turn only from an answer that turn wrote
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: settle a failed turn from its own answer, and only while it is still the failure shown
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: drop a failure whose answer arrived even when a newer turn owns the error
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: free an answered failure whatever the turn that started meanwhile is doing
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: drop a rows read that a turn outran, rather than merging it under newer messages
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: drop a rows read whose conversation was left and opened again
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: hand over a file still being read when its composer goes
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: count a drop's routing as work in flight, so its file is handed over too
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: hold the send until every file a conversation is owed has landed
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: keep a panel mounted per conversation instead of handing its draft over
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep the withdrawn chat whose composer was written in, not the empty one
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep the chat in front of the reader when both withdrawn composers were written in
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep a retry's own run arguments when a turn elsewhere refuses it
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: name panels apart across pools, and read a flow's inputs when its chat is built
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: mark test flow conversations apart from deployed ones and allow renaming a chat
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: keep the conversation kind across refreshes and reject NUL titles
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: ignore conversation lists for a kind no longer selected
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: start a fresh conversation listing when the kind changes on a later page
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: refuse sending into a conversation of the other kind
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: refuse cross-kind conversation continuations on the server
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep the conversation filter unavailable while an answer runs
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* refactor: run the flow chat UI on the windmill-chat sdk
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: structural answer check, poll option and latest run in the chat sdk
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: count jobless tool rows and the loaded license in the flow chat
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* feat: windmill-chat sdk for chat-mode flows in external frontends and raw apps
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018aQiZNAU8g17kWkyTryS5J
* fix: keep streamed answers until persisted, finish turns after history fallback
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018aQiZNAU8g17kWkyTryS5J
* feat: ai sdk transport and assistant-ui runtime for windmill-chat
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: finish a turn from the flow result until its answer row lands, hash chat ids without crypto.subtle
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: judge a turn answered by a persisted assistant row, wherever it was fetched
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: attribute a turn's answer to its own jobs, keep a local turn when switching conversations
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: mirror local history on every change, attribute failure-handler answers to the turn
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: new chat per token string in the React hook, idle after destroy, no reorder on view
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: recreate the hook's chat on any credential change, namespace local history per user
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix: send the latest inputs from the React hook
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>