Commit Graph
15210 Commits
Author SHA1 Message Date
Guilhem LemouelandClaude Opus 5 08554daaa2 Merge remote-tracking branch 'origin/main' into glm/session-deployed-runs
The run page and runs list now mount in process (#11721, #11724), which gives
`/run/<id>` a slot of its own instead of resolving to an iframe. The tab tests
here read better for it: a tab showing a run is `kind: 'run'`, so it cannot
match the viewer test that routes a proposed run to an item's page, and the
card keeps the form as intended.

`Run again` arrives with it, seeding a deployed page's form from the tab url's
fragment. The detail pages now read both that and a chat call's proposal at
init, the proposal last — re-pointing a tab rebuilds its url without the
fragment, so in practice only one of them seeds — and `ItemViewerView`'s load
key takes both, since either changing has to rebuild the form.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 05:26:14 -07:00
Guilhem LemouelandClaude Opus 5 aaa436d126 feat: hand a proposed run to the page already showing it
A reader who declines a proposal and asks for different arguments still has
that item's page open, and the next proposal belongs on it — but it was parked
on the card until Preview was pressed again. `requestRunArgs` now routes the
call to that page itself, through `openRunOnDeployedPage` with
`onlyIfAlreadyOpen`: a tab already on the item is re-pointed, and anything else
— a tab showing a run included — answers no and leaves the form on the card.

The card keeps a working form while a page carries the call, rather than
reporting that its inputs are elsewhere. Only the chat's own form in a tab is
exclusive with it, since that one is the same draft and two mounts each reorder
the schema in place; a page builds its form from a copy of the proposal and
shares nothing. So the card folds its row instead of emptying it, and expanding
it is how a run goes from the transcript. `isRunFormTabOpen` answers that
narrower question, and the collapse moves into the row's default so pressing
Preview and being routed here behave alike.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 05:21:59 -07:00
Guilhem LemouelandClaude Opus 5 9f9e10f0c8 fix: sit the parked-call banner in the form's own header row
The banner was its own block directly above the form, so it sat flush against
the first field. It now shares the row that carries the JSON toggle, where the
existing input badges get their spacing from `min-h-12`.

It goes ahead of the saved-input badge, whose reserved slot stays mounted while
hidden and would otherwise push the banner off the left edge. The row's gate
takes `pendingRun` as well, since a runnable with no schema properties renders
no row and would drop the banner with it.

The badge's reject button also takes the alert palette it sits on, through
`tone`, instead of the neutral bordered one it had from the deprecated
`color`/`size` props.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 05:21:49 -07:00
Ruben FiszelandClaude Opus 5.5 3d67d3ac6b refactor: mount the runs list in process in ai session previews (#11724)
* refactor: mount the runs list in process in ai session previews

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

* fix: tell runs list tabs apart by filters and reseed on re-point

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

* fix: remount a hosted runs list only when moved from outside

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:10:23 +00:00
Ruben FiszelandClaude Opus 5.5 3d74f6ea2a feat: data table migration tools in ai sessions (#11723)
* feat: data table migration tools and role guidance in ai sessions

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

* feat: shared data table guidance and safer migration tool failures

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

* fix: keep a migration that fails to apply and let the session rewrite it

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

* fix: rewrite only a pending migration and qualify fork isolation

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:10:05 +00:00
Ruben FiszelandClaude Opus 5.5 a80c6ffacb refactor: mount the run page in process in ai session previews (#11721)
* refactor: mount the run page in process in ai session previews

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

* fix: let run again fire repeatedly and re-pin an open script tab

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

* fix: keep a run opened through a share link in its own frame

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:14:49 +02:00
Guilhem LemouelandClaude Opus 5 5ea041b4c2 fix: redact an adopted run against the schema its page ran
Redaction only visits the leaves the schema it is given declares, and the page
runs the deployed version as it stands when Run is pressed. A deploy between
this call reading the schema and that press can add a file argument ours never
had, and its bytes then passed unredacted into the persisted card and the
model's result, under the size limit that would have caught a large one.

`adopt` hands over the schema it ran against alongside the job and arguments,
and both redactions use it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 02:56:19 -07:00
Guilhem LemouelandClaude Opus 5 ef870a52e4 fix: keep the refused form on the side it is showing
Closing the JSON editor when the form starts refusing writes mounted
`SchemaForm` in its place, and `PasswordArgInput` mints a variable from the
literal it opens on without consulting `disabled` — so a reader who typed a
plaintext secret into JSON view had it stored by the act of entering plan mode,
with no run and no Run press.

The form no longer swaps sides while it refuses: `JsonInputs` takes `readOnly`
and the editor stays mounted and uneditable. The JSON toggle is already hidden
in that state, which is what keeps the fields from mounting from the other
direction.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 02:39:42 -07:00
Ruben FiszelandClaude Opus 5.5 d7c910fcec chore: bump frontend and cli python parser wasm packages to 1.830.0 (#11720)
* chore: bump frontend python parser wasm packages to 1.830.0

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

* chore: bump cli python parser wasm packages to 1.830.0

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 11:39:16 +02:00
Ruben FiszelandClaude Opus 5.5 2c6de9d896 fix: keep the app editor's parent_version out of deployed apps (#11719)
* fix: keep the app editor's parent_version out of deployed apps

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

* fix: drop parent_version when deploying an app draft

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 09:18:26 +00:00
Guilhem LemouelandClaude Opus 5 27cb8e7ae6 fix: refuse a run in the form, and show an adopted job's own arguments
Two findings on the deployed page carrying a chat call.

`RunForm.run()` mints a variable per `password` argument before it calls
`runAction`, so the plan-mode gate in the detail pages ran after the write it
was there to prevent — and the keybinding reached it without the button. The
refusal moves into the form, as `runRefusal`: set, it takes no writes at all,
its submit buttons are disabled, and `run()` says so and returns before the
secret processing. The page also stops offering the JSON editor under plan
mode, instead of leaving one mounted that silently discards what is typed.

An adopted job's arguments are the page's, and the card had no way to show
them: it kept rendering the proposal, so a reader who edited a field saw the
wrong values and the model was told nothing. `adopt` now hands them over with
the job id, and they go through the same redaction and size guard as a run
this tool starts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 02:10:10 -07:00
a298ed3fc1 feat: add the viewer's roles to unnamed data table connections (#11709)
* feat: connect to a data table with every role of the job's viewer

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

* fix: key a cached result by the run's recorded viewer

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

* test: pin the per-viewer cache key and fix a stale doc sentence

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

* fix: length-prefix the viewer in the result cache key

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

* feat: drop data table role set logins unused for 30 days

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

* chore: pin the ee ref with the set login sweep fixes

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

* chore: pin the ee ref with the sweep retry fix

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

* test: give the cache key test its own migrated database

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

* feat: add the viewer's roles to a data table connection that names none

The default role of a data table under roles is now a floor: a connection
naming no role also holds the roles its viewer is a tenant of, unless the
default is admin. This replaces the explicit as=viewer option, which is
removed from the reference parser, the executors and both clients. The roles
drawer warns while the default is admin and confirms before removing the
default role.

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

* feat: let a data table have no default role

A connection naming no role then holds its viewer's roles only and is
refused without any. The roles drawer offers the choice, states what an
unnamed connection gets for the current settings, says who gets admin while
it is the default, and notes who owns a table created over several roles.

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

* feat: start a data table's roles with admin open to everyone

Turning roles on from the drawer seeded admin with no tenant, which refused
every non-admin member's job as soon as it was saved. It now starts open to
everyone, so the toggle changes nothing until the roles are edited, and the
drawer warns for as long as everyone can connect as admin.

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

* chore: update ee-repo-ref to 40ab35596e6fcb82a4dfc56e186befb807f8e2af

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

Previous ee-repo-ref: a5def184a29fffab8ed42c70c5a7445b2b3cbe98

New ee-repo-ref: 40ab35596e6fcb82a4dfc56e186befb807f8e2af

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-13 09:01:21 +00:00
Guilhem LemouelandClaude Opus 5 88683188ce fix: carry a run proposal on the call, not in the tab url
The proposal reached the deployed page through the tab url's hash, which the
page already reads for "Run again". Two things were wrong with that carrier:

- A tab already open on the item does not remount when it is re-pointed, and
  both detail pages read the hash once at init — so a second proposal for the
  same item opened its form on the first one's arguments.
- Tab urls are persisted with the session, so a draft holding file bytes or an
  un-minted `password` literal was written to IndexedDB. The transcript avoids
  both deliberately, through `redactFileArgs` and `MAX_PERSISTED_ARGS_LENGTH`.

The call now carries its own proposal: `PendingRun.proposedArgs` reads the
card's live draft, the page seeds its form from it at init, and the tab's url
names only the call. `ItemViewerView`'s load key includes that name, so a tab
re-pointed to another call builds its form again.

Two more fixes on the same path:

- `adopt` was read off the prop after awaiting job creation, so a call that
  settled during the request could be answered with another call's job. The
  press now captures the call it was made under.
- An adopted job's arguments and version are the page's, which this tool cannot
  read, but the model was told `Ran with arguments: {}`. It is now told the user
  ran it on the item's own page, and that the arguments are the page's.
- Adopting hands the carrying tab to the run, so the page no longer navigates
  there as well — that left two tabs open on the same job.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-13 01:42:55 -07:00
Guilhem Lemouel f73fdde930 Merge remote-tracking branch 'origin/main' into glm/session-deployed-runs
# Conflicts:
#	frontend/src/lib/components/details/FlowDetail.svelte
#	frontend/src/lib/components/sessions/sessionPreviewTabs.svelte.ts
#	frontend/src/lib/components/sessions/sessionRuntime.svelte.ts
2026-10-13 00:59:59 -07:00
hugocasa b57fd3e29a chore: publish the chat sdk as @windmill-labs/chat-sdk (#11686)
* chore: publish the chat sdk as @windmill-labs/chat-sdk

* chore: publish the chat sdk with a dedicated npm token

* chore: publish the chat sdk with npm trusted publishing
2026-10-13 09:27:24 +02:00
AlexRV12andClaude Opus 5.5 cd502a5270 fix: resolve a new item's chosen name in session preview tools (#11688)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 08:59:39 +02:00
GuilhemandClaude Opus 5.5 aeeeb042f9 fix: persist hidden languages in edit default scripts drawer (#11693)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-13 08:56:31 +02:00
hugocasaandClaude Opus 5.5 7bbe03227d fix: bump git sync hub scripts to cli 1.830.0 (#11681)
Claude-Session: https://claude.ai/code/session_011BzU9zd53JsTShCsbKzYzB

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-13 08:55:31 +02:00
Alexander PetricandClaude Opus 5.5 add042ef2f fix: end other sessions when a user changes their password (#11710)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-13 08:52:58 +02:00
4942149b05 feat: encrypt workspace secrets with AES-256-GCM (#11678)
* feat: encrypt workspace secrets with AES-256-GCM

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

* docs: note the aead gate covers workers only and is one-way

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

* fix: skip secrets the upgrade cannot store and clear its guard on panic

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

* fix: start aead secret writes one release after read support

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

* chore: update ee-repo-ref to 06610ecc950ed64a2709d7f1aa8c7b49a95fdbae

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

Previous ee-repo-ref: 599eae0034b34c5e0d3d42df37cf18bbe01f9b49

New ee-repo-ref: 06610ecc950ed64a2709d7f1aa8c7b49a95fdbae

Automated by sync-ee-ref workflow.

* feat: widen variable.value to fit AES-GCM ciphertext of the longest legacy secret

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

* fix: refuse legacy secrets longer than 15000 chars so every secret can be upgraded

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

* fix: cap legacy secrets at 15000 chars with a check constraint so every writer is covered

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

---------

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-13 08:27:13 +02:00
Ruben FiszelandClaude Opus 5.5 4be67fe3ac fix(groups): recompute member roles when an instance group role is cleared (#11708)
* fix(groups): recompute member roles when an instance group role is cleared

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

* fix: restore sqlx cache entry still used by the scim group delete

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:57:36 +02:00
Ruben Fiszel 8cdb42aaae perf: run shellcheck directly from the lsp launcher (#11707) 2026-10-12 18:41:26 +00:00
AlexRV12andClaude Opus 5.5 c6692ace15 fix: keep a custom error handler's slack argument on save (#11696)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 17:32:10 +00:00
AlexRV12 05c7b688e5 fix: stop session dom tools reading a raw app preview that is not current (#11700)
* fix: wait for the raw app build before reading its preview dom

* fix: warn the dom and screenshot tools when the raw app build failed

* fix: tell the dom and screenshot tools when the raw app awaits sdk consent

* fix: tell the dom and screenshot tools while the raw app sdk token loads
2026-10-12 17:31:40 +00:00
Ruben FiszelandClaude Opus 5.5 36ea2da0bf warn when a raw app sql viewer-identity input is not a ctx field (#11704)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:30:29 +00:00
Ruben FiszelandClaude Opus 5.5 26afeecbd5 feat(cli): declare app sandbox and frontend api scopes in app yaml (#11703)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:28:38 +00:00
Ruben FiszelandClaude Opus 5.5 14519884e4 feat: support array arguments in snowflake scripts (#11702)
* feat: support array arguments in snowflake scripts

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

* docs: cast the parsed snowflake list to array in the guidance

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

* fix: parse a json array default of a sql list argument as a list

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:28:05 +00:00
Ruben FiszelandClaude Opus 5.5 a92b29dae6 fix: load the s3 explorer table lazily to keep monaco out of the app shell (#11701)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:07:23 +00:00
Ruben FiszelandClaude Opus 5.5 7627c1be8d fix: fill app ctx inputs from the viewer's session, not the request (#11698)
* fix: fill raw app ctx inputs on the server, not from the request

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

* fix: read declared ctx inputs from the deployed app at run time

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

* test: count the revocation's cache invalidation apart from the deploy's

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

* refactor: drop the deploy-time cache eviction trigger, rely on the cache ttl

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:47:59 +00:00
Ruben FiszelandClaude Opus 5.5 72d1092de9 fix: run a workflow-as-code task called from inside a task in place (#11699)
* fix: run a workflow-as-code task called from inside a task in place

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

* fix: hand an async task body an awaitable for a sync nested task

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

* fix: mark the task-body scope per nested task body

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

* docs: note the task-body behaviour of step and sleep

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:47:07 +00:00
157183ae9c feat: external signer for OIDC tokens and a log line per mint (#11614)
* feat: sign OIDC tokens with an external signer and log every mint

* fix: init the signer in sqs_trigger builds and show signer reachability from results

* fix: key the OIDC key rows by source and kid

* chore: bump ee ref and list the oidc-signer subcommand only where it exists

* fix: advertise the actual signing algorithm in OIDC discovery

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

* fix: harden the external signer startup, agent workers and failed mints

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

* chore: bump ee ref for the stored key listing fix

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

* feat: list the oidc signing settings page only with an external signer

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

* chore: update ee-repo-ref to 1e538620a9b2f08b044997d032e71d8720ecbd5c

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

Previous ee-repo-ref: 84fa325737df98407c7b9f79c09d6e9378c46147

New ee-repo-ref: 1e538620a9b2f08b044997d032e71d8720ecbd5c

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-12 16:01:41 +00:00
afbbc0b1b2 feat: audit declarative instance config writes (#11684)
* feat: audit declarative instance config writes

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

* fix: keep early logs, base url and license plan for declarative writers

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

* refactor: require an observer on every config apply, drop license loading

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

* fix: export only audit events from the declarative subcommands

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

* chore: update ee-repo-ref to d6a6cdd343e7744ea49c610f9534c8013c8ffc2a

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

Previous ee-repo-ref: fc51c31bafb5975694fffe1da51f7b41fbf127a6

New ee-repo-ref: d6a6cdd343e7744ea49c610f9534c8013c8ffc2a

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-12 16:37:05 +02:00
Ruben FiszelandClaude Opus 5.5 1e3aef877c test: fix flaky success handler integration tests (#11691)
* test: stop success handler tests sharing the deployed script cache

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

* chore: drop the sqlx cache entry of the removed test query

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:32:45 +02:00
AlexRV12andClaude Opus 5.5 54eeb451e4 refactor: remove vue as a full-code app framework (#11690)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 12:31:01 +02:00
hugocasaandClaude Opus 5.5 a8e2f1f1ca fix: keep ai agent schema property order stable across jobs (#11687)
* fix: keep ai agent schema property order stable across jobs

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

* fix: keep tool parameter order when filtering preset inputs

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 11:45:03 +02:00
Ruben FiszelandClaude Opus 5.5 b347e792f8 make the packaged components resolvable by consumers (#11682)
* fix: make the packaged components resolvable by consumers

The svelte-package output of @windmill-labs/components imported the chat
SDK from outside the package root, pointed `$lib/utils` at a directory
with no index, and shipped an `import.meta.glob` on the `$lib` alias.
Bundle the chat SDK entry point into the package, repair the directory
specifier, make the glob relative, and fail packaging on any import a
consumer cannot resolve.

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

* fix: pin the chat sdk output root and widen the packaging checks

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:47:52 +02:00
Ruben FiszelandClaude Opus 5.5 478eef7352 fix: resolve $var: references in mcp resource headers (#11679)
* fix: resolve $var: references in mcp resource headers

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

* fix: require variables:read scope to resolve mcp header variables

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 09:56:48 +02:00
9fa9b77926 feat: redesign the s3 explorer and show data files as tables (#11642)
* feat: restyle s3 explorer tree like the db manager tree

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

* feat: make s3 explorer flush with its drawer

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

* feat: show s3 file preview as an inset card

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

* feat: redesign s3 explorer file header

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

* feat: move s3 csv preview options into the file header band

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

* fix: narrow the s3 csv separator select

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

* feat: show csv, parquet and json files as tables in the s3 explorer

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

* fix: keep the detected s3 csv separator shown in text view

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

* fix: drop stale s3 table responses and unfilterable nested columns

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

* chore: pin ee ref for the s3 table decimal filter fix

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

* chore: pin ee ref for the s3 table decimal scale fix

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

* chore: pin ee ref for strict s3 table decimal filter parsing

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

* chore: pin ee ref for the s3 decimal exponent bound

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

* chore: update ee-repo-ref to 06610ecc950ed64a2709d7f1aa8c7b49a95fdbae

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

Previous ee-repo-ref: 74f041e9767f2ac612e21f351f96e71c584e2904

New ee-repo-ref: 06610ecc950ed64a2709d7f1aa8c7b49a95fdbae

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-11 23:29:05 +02:00
Ruben FiszelandClaude Opus 5.5 aae5f2efaa fix: parse python 3.12-3.15 syntax in the python parsers (#11675)
* fix: parse python 3.12-3.15 syntax by moving the python parsers to ruff

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

* test: pin async for loops in the python wac dag

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

* fix: tell main apart from a look-alike line inside a string

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

* fix: keep import split and async for as before, fix sql asset path panic

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:26:03 +02:00
Ruben FiszelandClaude Opus 5.5 0758bdc46b refactor: remove the frontend build-time base url (#11674)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 11:22:46 +02:00
Ruben FiszelandClaude Opus 5.5 ed7a859e8c chore: bump uv to 0.13.0 (#11665)
* chore: bump uv to 0.13.0

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

* fix: pin the python ansible is installed on in the full images

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:06:58 +02:00
Ruben FiszelandClaude Opus 5.5 0250a90849 chore: bump tokio to 1.53 lts (#11663)
* chore: bump tokio to 1.51 lts

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

* chore: move tokio pin to 1.53 lts

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:50:56 +02:00
Ruben FiszelandClaude Opus 5.5 74c9b0cb2e feat: add python 3.14 and 3.15 to the supported instance versions (#11654)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:45:20 +02:00
Ruben FiszelandClaude Opus 5.5 dedd77587f fix: keep preserve_step_tags on saved branch and loop flow nodes (#11660)
* fix: keep preserve_step_tags on saved branch and loop flow nodes

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

* style: format reduce_flow call

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:40:00 +02:00
Ruben FiszelandClaude Opus 5.5 93e81ec189 [ee] chore: upgrade native runtime to current deno crates and v8 150 (#11657)
* chore: upgrade the native runtime to the current deno crates and v8 150

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

* fix: keep data and blob fetches working under no_network

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

* fix: pin the simdutf v8 archive and keep telemetry on http exporters

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

* fix: force the http otlp exporter for native telemetry and pin v8

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:54:57 +00:00
Ruben Fiszelandrubenfiszel 0a19d26d5f chore(main): release 1.830.0 (#11650)
* chore(main): release 1.830.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
v1.830.0
2026-10-09 19:12:12 +00:00
Alexander PetricandClaude Opus 5.5 8556a7bebe fix: harden app secret validation (#11655)
Claude-Session: https://claude.ai/code/session_01Kv72vdCDggCZEjJSmNCwnX

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 18:20:22 +00:00
hugocasaandClaude Opus 5.5 70db567a78 fix(cli): count superadmins as able to preserve ownership on push (#11653)
Claude-Session: https://claude.ai/code/session_011BzU9zd53JsTShCsbKzYzB

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 20:06:01 +02:00
d3ddef0b7e feat: retry transient AI provider failures before output reaches readers (#11623)
* feat: retry transient AI provider failures before output reaches readers

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

* fix: keep completed AI streams, stop retrying prompt blocks, bound retry-after

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

* refactor: share the AI send-error retry rule between agent and proxy

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

* fix: accept a clean end of stream from OpenAI-compatible providers

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

* fix: classify AI provider errors the way the reference clients do

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

* fix: count a Gemini function call as the end of its turn

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

* fix: count an Anthropic stop_reason as the end of its stream

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

* fix: accept a Gemini answer that reports usage and no output

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

* fix: accept a Gemini stream that closes cleanly with no output

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2026-10-09 20:00:50 +02:00
02e4697157 feat: let operators compose full-code apps when the workspace grants it (#11229)
* feat: let operators compose full-code apps when the workspace grants it

Adds operator_settings.builder_apps, the second builder right, granted
independently of flows because the two are not equally verifiable: a composed
flow is checked in full server-side, while a full-code app is a browser-built
bundle no check can read. The app right rests instead on forced sandbox
isolation, a refusal of Viewer execution mode, and a deploy-time check of every
runnable the app can reach.

BuilderKind arrives with the second kind and is a mandatory argument, so no gate
can mean "either" by accident: one that did would authorize an app write on a
flows-only workspace. The only surfaces reading .any() are the ones that are
genuinely not per-kind, the seat a membership costs and listing drafts.

validate_operator_composed_app checks two surfaces rather than one, because they
are not the same list: the policy's triggerables and the runnableByPath entries
in the app value, which is what the deployed bundle actually resolves against.
Every colon in a triggerable key is a possible split, since execute_component
looks up "<component>:<path>" with an unrestricted component string.

create_app_raw_source stays closed: it compiles caller-supplied sources with a
bundler job on a worker, which is arbitrary code execution. Builders lose
nothing, since the browser and the CLI both bundle locally and deploy through
the multipart endpoints.

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

* fix: list a builder's app drafts and refuse inline code in them

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

* chore: update ee-repo-ref to 6d15ff957df4dcd5129e1ab217eab1a13af62fbb

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

* fix: check a builder app as it will be stored

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

* fix: show the home list edit button to builder operators

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

* feat: pause the raw app preview for an app an operator deployed

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

* fix: let app builders save a full-code app's deploy settings

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

* docs: record the builder app settings path, public apps and the editor preview

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

* fix: cache the merged EE seat usage query

The EE query now reads audit_partitioned and skips service accounts, so the
cached entry for its builder_apps predicate no longer matched and offline EE
builds failed with no cached data.

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

* fix: pause the raw app preview for loaded drafts and unknown authors

A draft loaded from an operator ran in the viewer's preview because the pause
only checked the app's last deployer, and an author no longer in the workspace
read as a developer. The pause now checks a loaded draft's owner, records it
in the viewer's draft until the preview is run or deployed, and holds when the
author cannot be found.

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

* docs: name guest apps among the modes a builder may deploy

Guest runs as the publisher with no Viewer fallback, like Publisher and
Anonymous, and RestrictGuestAppDeployment refuses it per workspace.

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

* fix: keep a loaded draft's preview paused in AI sessions and chat edits

The session draft codec and the chat's draft save dropped loaded_from, so
opening a paused operator draft in an AI session, or editing it through the
chat, ran it with the viewer's session.

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

* test: pin builder refusals for low-code apps and unreviewed previews

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

* fix: keep the operator mark when loading a developer's copy of a draft

Loading another user's draft recorded only who saved it, so a developer's
copy of an operator draft they never previewed opened unpaused for the next
person who loaded it, running the operator's code with their session.

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

* fix: let builders restore a full-code app from deployment history

Restore always sends allow_kind_change, which the builder check refused even
for a full-code version restored over a full-code app. Builders now drop the
flag, so the locked kind check still refuses an actual conversion.

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

* style: rustfmt the builder checks in jobs.rs

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

* docs: record the builder kind-check race as an accepted risk

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

* fix: never trust the owner name a loaded draft carries

A loaded draft's loaded_from is written by its owner, so an operator could
name a developer, or leave it empty, and the next person to load the draft
previewed it unpaused. A loaded draft that carries any mark now stays
paused as unattributable; an unmarked one is still checked against its
real owner.

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

* docs: record viewer-supplied resources in builder apps as an accepted risk

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

* fix: say that the app right lets operators write frontend code

The settings section and the docs told admins builder operators "still
cannot write code", but the app right has them write the app's frontend
bundle. Only backend code stays out of reach.

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

* docs: state the raw-source closure once and drop an unreachable preview case

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

* perf: look up only the author when deciding whether to pause the preview

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

* test: pin that the app right alone bills operators as developers

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

* chore: point ee-repo-ref at the EE seat test

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

* refactor: drop the editor preview pause now that sandboxed apps preview isolated

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

* fix: refuse a builder operator's app draft without the sandbox

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

* fix: turn the sandbox on when a builder operator opens the app editor

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

* fix: refuse builder app drafts naming runnables they cannot read

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

* docs: note the editor preview asks before minting a builder app token

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

* refactor: trim the builder app check comments to the constraints

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

* fix: refuse an app runnable whose runType is not script, flow or hub

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

* fix: check builder app draft policy keys like a deploy does

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

* test: count main's half-seat service accounts in the builder billing test

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

* refactor: name the builder policy check for drafts as well as deploys

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

* fix: let a builder app draft autosave with a stale triggerables_v2

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

* fix: check the script version a builder app would run, not any version

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

* fix: refuse viewer mode in a builder app draft as on deploy

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

* refactor: hold builder app drafts and deploys to one check

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

* fix: say a builder's script may not have finished deploying

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

* fix: cap builder app triggerable keys before reading every colon split

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

* fix: refuse a builder app draft that runs as someone else

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

* fix: conform builder app drafts saved by the AI chat as the editor does

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

* docs: record that a deployed builder draft runs as its deployer

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

* fix: refuse builder app runnables not written as plain text

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

* docs: a builder draft may carry its builder's own run identity

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

* fix: offer builders Start with AI only when it opens a session

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

* fix: name full-code apps in the builder rights confirmation

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

* fix: name only the granted builder rights in the confirmation

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

* docs: note a wm_deployers builder may keep another run identity

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

* fix: give builders a starter app that calls no missing runnables

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

* fix: seed the builder starter under the picker for builders

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

* docs: qualify the builder run identity comment for wm_deployers

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

* fix: resolve builder app script hashes before opening the RLS transaction

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

* test: run the builder app tests serially to share the rights cache safely

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

* fix: give builders the builder starter on a fresh editor load

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

* fix: drop a new-app load overtaken while waiting for the workspace list

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

* fix: keep main's 401 for operators previewing without the app right

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

* chore: update ee-repo-ref to 5d7726c4979070ee8db4fb9e8014152872a641ba

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

Previous ee-repo-ref: 7151060bfc02908e97d9344b3820ee33a4951322

New ee-repo-ref: 5d7726c4979070ee8db4fb9e8014152872a641ba

Automated by sync-ee-ref workflow.

* refactor: let the app row's edit button trust its write flag

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

* chore: point ee-repo-ref at the merged EE companion

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

* docs: note the session raw-app editor does not conform builder drafts yet

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

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2026-10-09 19:31:36 +02:00