Commit Graph
9243 Commits
Author SHA1 Message Date
Guilhem LemouelandClaude Opus 5 b824fe3ffe fix(sessions): hand back only what a form actually held
A tab closed while the deployed item was still being fetched handed the card an
empty object, wiping the proposal it was still parked on: the page registers its
destroy hook long before `RunForm` gives `args` a value.

The comment above it also claimed every way out destroys the page. The next call
re-pointing the same tab does not, and that page's edits stop there.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 08:19:38 -07:00
Guilhem LemouelandClaude Opus 5 8fb8d2a329 refactor(sessions): seed the run form as it is built, not after it mounts
The form takes what it opens holding as a prop, and the page renders it under
the call's id. A request arriving on a tab that is already open builds a new
form already filled, so there is no mounted instance to reach for and nothing to
wait on — which is all the seeding effect was doing.

That also settles where the hand-back reads its call: with no instance to track,
`onDestroy` reads the prop, which is still there.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 07:33:14 -07:00
Guilhem LemouelandClaude Opus 5 5369802585 refactor(sessions): hand the form back on destroy rather than from an effect
Every way the page stops carrying a call and still holds edits destroys the
component: the tab closes, or its url changes and `loadKey` remounts it. So the
hand-back is a destroy hook, not a reaction to the call changing — which needed
a key and two `untrack`s to keep its own write from re-running it.

The call is the one this form was seeded for, captured where it is seeded. By
the time the hook runs the tab has already stopped naming it, so reading it then
would find nothing to hand back to.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 07:24:28 -07:00
Guilhem LemouelandClaude Opus 5 1a2821d711 fix(sessions): close the JSON route into a read-only run form
Disabling the fields left the other way in: arguments written as JSON reach the
same object, and a password set there is a plain literal until the schema field
mounts onto it — which mints it whether or not that field is disabled. The
editor's writes are refused while the form is read-only, and the toggle offering
it is not drawn.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 03:27:57 -07:00
Guilhem LemouelandClaude Opus 5 2fe3579f75 fix(sessions): take no writes on a relocated form under plan mode
A password field mints an ephemeral workspace variable as it is typed, so
withholding the dynamic-select helper was half the promise: the field itself has
to be unwritable. One flag now covers both, as the card's own form already did.

The hand-back is keyed on the call rather than on the object naming it, which is
rebuilt whenever the draft or the posture changes — its own write to that draft
is what would have re-run it. It also hands back only what its own form held: the
next call for this item re-points the same tab without remounting, and its
seeding can land first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 03:07:55 -07:00
Guilhem LemouelandClaude Opus 5 88457fbe16 fix(sessions): keep the page's promises and its edits when it holds a call
The dynamic-select helper runs its job when the field mounts, not when Run is
pressed, so a form relocated to the page ran one under plan mode — which the
card withholds for exactly that reason. The page owes the same promise while it
is standing in for a card.

Its form is a copy, so arguments typed there were dropped when the call went
back to the card: it then offered, and ran, what the page had opened with. The
call now carries them back.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 02:41:30 -07:00
Guilhem LemouelandClaude Opus 5 d5b96105c6 refactor(sessions): let the tab carry the call, and leave chat flows alone
The page that answers a parked run form was found by item, so anything on that
page could resolve the call and act on it: a version picked after the fact, a
press that outlived its call, a send in some other conversation. Each was fixed
where it surfaced, and the next one surfaced somewhere else.

The tab carries the call now, named in its url beside the version pin. Only the
tab opened for a call can answer it, and re-pointing that tab anywhere drops the
name, so a version picked on the page hands the call back with nothing to check
for it. The item-keyed map and the lifecycle hooks around it are gone.

A chat-enabled flow's page is a conversation with no run form, so it cannot
answer a call at all: Preview opens it to look at and the card keeps the run,
which is what the agent needs to report a result. That deletes the composer
seeding, the strip above it, and the "Handed off" outcome that existed only to
describe a run the agent never saw. Prefilling that composer is worth having on
its own and comes back in its own PR.

Running a deployed chat-enabled flow needs a memory id, which this path never
sent: the card's Run answered with a 400. Each such run now starts its own
conversation on the flow's page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-07 02:04:00 -07:00
Guilhem Lemouel b9cd05d2bf Merge remote-tracking branch 'origin/main' into glm/session-deployed-runs
# Conflicts:
#	frontend/src/lib/components/sessions/ItemViewerView.svelte
2026-10-07 01:45:26 -07:00
Ruben FiszelandClaude Opus 5.5 9d55a9381d add customUi prop to hide save to workspace on flow steps (#11566)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 17:05:18 +02:00
Ruben Fiszelandrubenfiszel cc37c45c3d chore(main): release 1.825.0 (#11548)
* chore(main): release 1.825.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2026-10-06 14:56:07 +02:00
Diego ImbertandClaude Opus 5.5 431f861388 feat: choose build with AI or code when creating a raw app (#11560)
* feat: choose build with AI or code when creating a raw app

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: carry the picked data table into a new-app session and seed only on 404

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: wait for data tables before build with AI and stop re-registering on edits

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: create apps without an unusable data table and name session-seeded apps

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat: rename new-app choices and hint where to switch to AI later

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 14:47:10 +02:00
GuilhemandClaude Opus 5.5 fd8de45cc7 feat: open a run as a pushed page on the narrow runs page (#11541)
* feat: open a run as a pushed page on narrow runs page

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep modifier-click multi-select and arrow keys on the narrow runs list

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: leave the narrow re-run page once the re-run is sent, and clear the opened run on reset

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: close the re-run options once a table re-run completes

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 14:45:03 +02:00
AlexRV12andClaude Opus 5.5 5f92daab6d fix: serve the raw-app preview shell sandboxed, load a blob copy in the editor (#11554)
* fix: serve the raw-app preview shell sandboxed, load a blob copy in the editor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: give the preview shell the deployed app wrapper's sandbox flags

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 14:40:56 +02:00
GuilhemandClaude Opus 5.5 5912d300a5 fix: group raw app edits that carry a file diff in the ai chat (#11558)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 14:35:26 +02:00
Ruben Fiszel 8c74f75de3 fix: simplify the run page AI card to a prompt and a chat button (#11561)
* fix: drop the add a prompt for AI button from the run page

* fix: open the run page in the session preview from a plain chat button

* fix: rename additional prompt for AI to AI prompt

* fix: put the run page chat button beside advanced when no AI prompt
2026-10-06 14:18:13 +02:00
Ruben Fiszel 2bf9cfcd59 fix: search slow runs filters by time windows instead of timing out (#11549)
* fix: search slow runs filters by time windows instead of timing out

* fix: cancel a pending runs page when its listing is reset

* fix: keep runs scan windows disjoint at microsecond precision

* fix: race the single runs request against the window scan

* fix: list the cursor window when a runs scan starts at the oldest job

* fix: show the runs history scan as an info alert

* fix: show runs scan progress as a bar and keep the session button on the searchbar row

* fix: stop a runs scan whose windows are no faster when narrower

* fix: right-align the runs searchbar row when the header wraps

* fix: keep the runs scan stop button inside a narrow list pane
2026-10-06 08:57:54 +00:00
hugocasaandClaude Opus 5.5 18e44d3174 feat: say a canceled team plan is canceled, not past due (#11539)
A team plan canceled mid-month now keeps premium until the 1st, capped at the
executions its final invoice paid for. That reuses the past-due cap, so the job
refusal and the UI toast said "your last invoice is unpaid". Word both for a
canceled plan, and show it on the plan settings page.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 08:08:13 +02:00
Ruben Fiszelandrubenfiszel 0abc0ac0c4 chore(main): release 1.824.1 (#11543)
* chore(main): release 1.824.1

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2026-10-06 00:24:43 +02:00
Ruben FiszelandClaude Opus 5.5 0908dee897 fix: keep monaco's diff engine out of the app shell bundle (#11542)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 00:20:36 +02:00
Guilhem LemouelandClaude Opus 5 7eff62ce17 fix(sessions): bind the page's async work to the call it started with
The page reads the call it is carrying from a derived, and every await on it
outlives that read: a call can settle and the next request for the same item be
adopted inside one `processSecretArgs` round trip. Read live on the far side,
the page would submit one request's arguments to another, decline a proposal the
reader had not been shown, or seed a composer over the one they were looking at.

Each of these now holds the call it began with. The form's own press holds its
guard too, so a replacement cannot have its latch released by the press before
it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-05 08:48:38 -07:00
Ruben Fiszelandrubenfiszel af42c471ef chore(main): release 1.824.0 (#11520)
* chore(main): release 1.824.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2026-10-05 15:27:00 +00:00
Guilhem LemouelandClaude Opus 5 e40bae34b9 fix(sessions): tell the form when a submitted call will never get a job
A surface that confirmed a run waits for the job it was promised, and a refused
start is the one end it cannot see: the call is neither pending nor cancelled.
It was inferred from the call no longer being pending, which stopped working as
soon as a press had to outlive that — the page then waited forever, offering a
Run that reached nothing.

`markRunFormEnded` is the mirror of `markRunFormStarted`: the server refused the
job, a sensitive argument could not be stored, or plan mode blocked it after the
arguments were handed over.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-05 08:16:32 -07:00
3aee181574 feat: bill team-plan service accounts as half a seat (#11298)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2026-10-05 15:15:29 +00:00
Guilhem LemouelandClaude Opus 5 7a02b21d52 fix(sessions): bind a press on the page to the call it started against
A call stops being pending the instant Run is pressed, well before its job
exists. The page went back to running on its own in that gap, so a second press
there started a job the chat never heard about. A press now holds the call until
the job lands or the call settles.

A press also kept reading its runner across `processSecretArgs`: cancelling while
a password was being minted switched the press to the page's own runner, which
then started a job the reader had just cancelled. The runner is read once, when
the press begins.

A chat flow's message waits on that same round trip. It needs nothing from it,
but a composer filled ahead of the inputs can be sent ahead of them, and the run
would carry the inputs the proposal was meant to replace.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-05 08:07:30 -07:00
AlexRV12andClaude Opus 5.5 6c4e34cd0d fix: show the flow row edit button to builder operators (#11535)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 15:01:25 +00:00
Guilhem LemouelandClaude Opus 5 0ac9b56ba3 fix(sessions): hand the call back when the page cannot honour it
A page carries an adopted call only while it can run what the call asked for.

Picking a version broke that silently: the tool starts its job by path, so Run on
a page pinned to an older version ran the deployed one instead — the page said v1
and the job returned v3. The page now hands the call back when it is on a version,
and the card takes its form back, which is where the call can still be confirmed
as proposed.

Whether the call is still waiting is the manager's answer, not the adoption map's.
Reading it live covers the ends that reach no hook: a submit whose job never
started, because the server refused it or plan mode blocked it after the arguments
were handed over. Those left the page with a dead Run and no way out but the X.

The page's Run also has to clear what the card's clears before the form mints a
password into a workspace variable — plan mode, and a second press.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-05 07:51:38 -07:00
Ruben Fiszel 4acb5b8f18 chore: bump go to 1.27.1 in the worker and extra images (#11537)
* chore: bump go to 1.27.1 in the worker and extra images

* chore: move the lsp scratch go.mod to go 1.27
2026-10-05 14:47:35 +00:00
3cba8a7e4c feat: add an AI decision flow step (TypeSafe's Jev, Cloudflare's Clef) (#11474)
* feat: add an AI decision flow step on TypeSafe's Jev

An `aidecision` step asks TypeSafe's Jev typed questions (choice, score,
yes/no) about a state and returns calibrated answers. It is a plain step:
a flow routes on the answers with a Branch to one after it, which the
editor builds and keeps in step with the questions. It can also be an AI
agent tool, where the calling model supplies the state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: read single-quoted branch conditions and flag branches on a removed question

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: route decision tools by their tag and keep structured questions as JSON

The questions editor writes only on an edit, so opening a step leaves its
value untouched, and questions the cards cannot hold stay in a JSON editor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: re-pick the questions editor mode when the value is replaced from elsewhere

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: keep the questions JSON editor's text in step with the value

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: recreate the questions JSON editor when the value is replaced from elsewhere

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat: run AI decisions on Cloudflare's Clef as well as TypeSafe's Jev

A `cloudflare` provider kind reads the hub's `cloudflare` resource (token and
account id), calls the model's Workers AI URL, and unwraps Workers AI's
`result` envelope. Like TypeSafe, it serves decision steps only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* feat: branch from each AI decision question, and align its editor with the brand guidelines

"Branch on this question" now sits in each choice question's card, which also
links to the Branch to one that routes it and flags options it misses or
branches it no longer matches. Labels, errors, cards and icons follow the form
guidelines and the Branch to one's cards.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* feat: branch on an AI decision from its graph node

A decision with a choice question nothing branches on yet shows a button beside
its node that inserts the Branch to one, as its question card does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: resolve Cloudflare resources in the AI proxy, and use the design-system button on the graph

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: put the decision_inputs test's doc comment back on it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* chore: regenerate the flow schema in prompts and the chat after the AiDecision description edit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* feat: switch AI decision questions between the form and JSON

JSON is always available; the form is offered whenever its cards can hold the
questions, and a value they cannot hold still opens in JSON.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: show step ids as badges and use the JSON toggle of the run forms

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: quote option names in the AI decision branch alerts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* feat: remove stale branches from the AI decision question card

An empty branch is removed directly; one with steps asks first, naming how many
steps go with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* feat: branch on yes/no AI decision questions, and test a decision step from the AI chat

A yes/no question branches like a choice: "Branch on this question" writes one
"yes" branch on `noul >= 0.5`, with the default as "no", and the helper still
reads it once the threshold is tuned. The AI chat's step test runs a decision
alone as a one-step preview, taking the state the chat passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: record removing several stale branches as one undo step

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: name the typesafe resource type TypeSafe

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: store TypeSafe as the typesafe resource type's display name, not in the word map

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: leave the typesafe and cloudflare resource types to the hub instead of seeding them

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* docs(AGENTS): resource types ship through the hub, not migrations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: show the questions JSON format beside the JSON toggle

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: give the questions JSON format in the field's description

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: style the decision's graph branch button like Add branch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: show the questions JSON format only in JSON mode

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* feat: show each question's branching under the questions JSON editor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: drop the redundant In JSON prefix from the questions format

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: shorten the decision state's description and show an example as its placeholder

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: escape a schema placeholder before the JSON editor renders it as HTML

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* fix: give the decision state's placeholder a text and an object example

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019sEUVZVYBjkzkaVkjbFeAL

* chore: update ee-repo-ref to 154cbccb6b8d47bf662b5507882917b5933d5a45

This commit updates the EE repository reference after PR #839 was merged in windmill-ee-private.

Previous ee-repo-ref: eaf38c1388f3cc5bece163404fffa959ede8cae0

New ee-repo-ref: 154cbccb6b8d47bf662b5507882917b5933d5a45

Automated by sync-ee-ref workflow.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2026-10-05 14:23:34 +00:00
Guilhem LemouelandClaude Opus 5 72ea7d416a feat(sessions): run a deployed item from its own page, for the chat
The run card stays in the chat by default. Preview opens the item's deployed
page in the preview panel with the proposed arguments already filled, and Run
there hands them back to the parked tool call — so the chat still owns the job
and reports on its result.

A chat flow has no run form to fill: its page is a conversation, so the proposed
message goes into the composer and a strip above it says what was asked for.
Sending it runs the flow in that conversation, which settles the call with a
reason rather than a refusal — the card says "Handed off", not "Cancelled".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-05 07:23:33 -07:00
GuilhemandClaude Opus 5.5 ec0883a627 feat(ai-chat): show per-file diffs for raw app edits (#11521)
* feat(ai-chat): show per-file diffs for raw app edits

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep reference runnable writes on the generic tool card

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: extend diff row highlights across horizontal overflow

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 14:21:59 +00:00
GuilhemandClaude Opus 5.5 4f30982ce3 fix: collapse queued and running chat tool calls into a waiting row (#11523)
* fix: collapse queued and running chat tool calls into a waiting row

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: correct the waiting-row comment in groupToolRuns

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: fold queued calls only behind a call in flight, after edit groups

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: stop a waiting row before queued calls that form an edit or explore group

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 14:21:43 +00:00
hugocasaandRuben Fiszel 8b2dc1e46c feat: add notion oauth provider (#11528)
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2026-10-05 14:20:49 +00:00
GuilhemandClaude Opus 5.5 cefb195376 fix: flush proxied responses before the dev supervisor closes the client (#11530)
* fix: flush proxied responses before the dev supervisor closes the client

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore: shorten dev supervisor close-path comment

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 14:16:22 +00:00
GuilhemandClaude Opus 5.5 f7c7d7ffd8 refactor: use the session tab strip for workflow sdk module tabs (#11522)
* refactor: use the session tab strip for workflow sdk module tabs

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep module deletion on the explicit button and tab order view-only

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor: use the design-system button for module deletion

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: let modified keys through file tabs and keep keyboard rename off the tab

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: route modified enter past the dnd zone so page shortcuts fire from draggable tabs

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: forward modified enter from dnd item wrappers too

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 12:33:01 +02:00
AlexRV12andClaude Opus 5.5 c962d3766b fix: evaluate field conditions and step test inputs in QuickJS (#11487)
* fix: evaluate field conditions and step test inputs in QuickJS

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: answer single-quoted field conditions without loading the engine

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: bound expression recursion and ignore leading blank space

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 12:28:46 +02:00
Guilhem af1a29a3cb feat: card layout and load-more for the audit logs page (#11507)
* feat: card layout and load-more for the audit logs page

* fix: stream audit log load-more with stop control and show inline filters from fhd

* fix: fit audit log filters to measured header width and hold timeline during load-more

* fix: keep audit log load-more available when a trimmed short batch has rows left
2026-10-05 10:34:05 +02:00
Ruben Fiszelandrubenfiszel 4096c3da74 chore(main): release 1.823.1 (#11516)
* chore(main): release 1.823.1

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2026-10-05 08:24:51 +02:00
Ruben FiszelandClaude Opus 5.5 289d3c3941 fix: stream the ai chat compaction request (#11514)
* fix: stream the ai chat compaction request instead of waiting on it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: reject a compaction stream stopped midway instead of keeping partial text

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: reject a compaction stream that ends without a finish reason

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: cover a completed responses stream in the streamed completion helper

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 08:05:25 +02:00
Ruben Fiszelandrubenfiszel 14d2995d76 chore(main): release 1.823.0 (#11503)
* chore(main): release 1.823.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2026-10-04 14:11:48 +02:00
GuilhemandClaude Opus 5.5 0f65df24d2 feat: redesign the service logs page (#11506)
* feat: redesign the service logs page

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: drop a stale jump after a cached host switch and remove unused max_lines

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep focus on url sync and expose host selection and new logs to assistive tech

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: reset the tail on dropdown host picks, resume refresh after search, key log cache by host

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: clear the pending jump when a host switch needs no fetch

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 20:18:44 +02:00
Ruben Fiszelandrubenfiszel 3c30c82fa2 chore(main): release 1.822.0 (#11480)
* chore(main): release 1.822.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
2026-10-03 09:42:45 +02:00
GuilhemandClaude Opus 5.5 64f9505688 feat: show upcoming events when hovering a schedule's cron expression (#11499)
* feat: show upcoming events when hovering a schedule's cron expression

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: read cron version from the draft for draft-only schedule previews

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 09:42:21 +02:00
e7fc1b2e2e feat: restricted job tokens per script and flow (#11484)
* feat: restricted job tokens (job_token_scopes on scripts and flows)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: admit flow-run reads, skip dedicated workers, gate on worker version

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep restricted jobs off flow runners, preserve scopes on rename and promotion

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep restricted jobs off every dedicated handoff, confine progress flow id

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: exclude restricted runnables from dedicated worker startup

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: gate restrictions on the release after 1.821.0

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: store per-job scopes on job_perms instead of v2_job, pin inline runs to the checked version

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat: step-level job_token_scopes for flow steps and agent tools

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: fail closed on perms read errors, refuse restricted queue imports, gate step scopes in previews

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: carry a job's scopes on its completion so a re-run keeps the caller's cap

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: carry a zombie job's scopes into its completion

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: leave a zombie for the next sweep when its scopes cannot be read

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* docs: correct the QueuedJobV2 completion comment

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: validate step scopes in batch flows, fail closed on unvalidated step scopes

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: refuse flows with step or tool restrictions at push while an older worker is live

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: apply the step-scope worker gate to flow restarts

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: list the job token toggle with the other step and flow settings

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* chore: pin the EE companion merged with EE main

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* perf: skip scope lookups for unrestricted jobs; list job token setting last

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* style: rustfmt scopes tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* fix: confine restricted job tokens to their own run lineage; drop remaining extra lookups

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FHGE3ynoAu6yrgeg4kLwL

* chore: update ee-repo-ref to 259ad3bfeef5285ba80eedc86309b11dca001220

This commit updates the EE repository reference after PR #843 was merged in windmill-ee-private.

Previous ee-repo-ref: 2b77c0225dca441235daf7bf0a06ba968df0c927

New ee-repo-ref: 259ad3bfeef5285ba80eedc86309b11dca001220

Automated by sync-ee-ref workflow.

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2026-10-03 09:33:44 +02:00
Ruben Fiszel e952298f84 feat: replace the AI input filling toggle with an additional prompt (#11501)
* feat: replace the AI input filling toggle with an additional prompt for AI

* feat: pass the additional prompt for AI to MCP clients and shared AI guidance

* feat: shrink the run page AI card to a button and a collapsed prompt

* fix: offer writers a way to add a prompt for AI from the run page
2026-10-03 09:33:18 +02:00
Ruben FiszelandClaude Opus 5.5 f2393e5b24 keep flow priority input inline with its toggle on wide screens (#11500)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 09:00:32 +02:00
Ruben FiszelandClaude Opus 5.5 68f8f19b33 fix: keep a resource default set in the schema when the script is redeployed (#11495)
* fix: keep a resource default set in the schema when the script is redeployed

Fixes #11493

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep a schema resource default only while the arg stays that resource type

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: drop a scalar resource default when the arg becomes a list

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 08:57:04 +02:00
Ruben FiszelandClaude Opus 5.5 98274a7336 fix: let legacy draft-only items be discarded from the home page (#11488)
* fix: let legacy draft-only items be discarded from the home page

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: describe the legacy draft move guard as it now is

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 19:11:50 +02:00
Ruben FiszelandClaude Opus 5.5 3d1d249556 feat: add an instance setting routing all dependency jobs to one tag (#11486)
* feat: add an instance setting routing all dependency jobs to one tag

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix: keep bunnative locks on bun and explain the default dependency routing

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 18:40:32 +02:00
Guilhem Lemouel 8aa84bc624 Merge remote-tracking branch 'origin/main' into glm/session-deployed-runs 2026-10-02 05:43:24 -07:00
Guilhem LemouelandClaude Opus 5 0208e53c75 docs(sessions): put the run-form doc comments back on their functions
Inserting the two handover methods stranded handleRunFormSubmit's comment above
one of them, and the host hook's comment still named a tool path that no longer
reaches it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-01 09:55:15 -07:00