Commit Graph
11235 Commits
Author SHA1 Message Date
hugocasaandwindmill-internal-app[bot] e6adf16fc9 feat: add query arg for oidc expiration (#7312)
* feat: add query arg for oidc expiration

* Update ee-repo-ref.txt

* Update ee-repo-ref.txt

---------

Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2025-12-08 18:00:51 +00:00
hugocasa e8ca7c5f95 feat(cli): new command to generate RT namespace + on init (#7317) 2025-12-08 17:01:37 +00:00
3699ce7a8f feat: new live onboarding for flows (#7194)
* Start workspace onboarding

* Add pictures to tutorial steps

* Remove unecessary step

* Continue tutorial by creating a flow together

* Add image into the Create Flow tutorial pop up

* Generate flow from frontend

* Set pause between each node

* Add automatic scripts overview

* Simplify tutorial, and add step to show the code

* Add input step

* Autoremove last step after 5 seconds

* Add flow typing when opening code editor

* Remove lock field from json file

* Add Guides tab on left menu

* Add /guides page

* Add tutorial card in Guides tab

* Add step to show data connector

* Add second text input to show 2 types of inputs and fill them dynamically

* Improve tutorial chronology

* Add flow input connexion with first sctript

* Improve overlay

* Improve wording

* Add new tutorial step to show node b

* Add test step

* Add cursor to pick typescript

* Improve end of tutorial

* Refactor

* Highlight bottom right corner for 5 and 6

* Fix last step overlay

* change home tutorial button

* guidelines nits

* Automate onNext() trigger on step 3

* Improve fakr cursor for Test this step button

* Improve overlay transitions

* Merge data connectors and test step steps

* Improve live code writing in step 3

* Add a step to complete the flow

* Improve the step where we generate remaining scripts

* Refactor

* Add blocking behavior on step 3

* nit about delay

* Prevent clicking on Next while code not generated

* Sharpen wordings

* Remove Svelte 4 and migrate to Svelte 5

* Remove unecesary helper function

* Add toast if the user clicks on Next button before code finished generating

* Add toasts to each step

* Improve tutorial trigger timing

* Improve delays

* Add cursor movement to Test Flow button

* Block previous on certain steps to prevent bug

* Fix for github npm check

* Fix for github npm check

* Unlike workspace onboarding and flow tutorial

* Rename flow tutorial with better name

* Remove the automatic trigger for flow previous and broken tutorial

* Push tutorials to Help sectionof the sidebar

* Fix redirection t /tutorials page

* Add tutorials page and update workspace onboarding flow

- Rename guides to tutorials page (/tutorials)
- Add workspace onboarding tutorial to tutorials page
- Remove Tutorial button from homepage
- Add welcome cards for empty workspace with 3 tutorial options
- Update workspace onboarding to redirect to homepage before starting
- Clean up URL parameter after tutorial completion
- Move Tutorials to Help menu in sidebar
- Remove automatic "action" tutorial trigger for new flows
- Add flow-live-tutorial (renamed from workspace-onboarding-continue)
- Add Previous button blocking with toast notifications in flow tutorial

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* Add tutorials to workspace homepage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* Start tutorials for Run/logs section

* Fix data connector

* Add flow execution graph from Run drawer

* Add tabs highlighting in drawer

* Improve tutorial on run drawer

* Add mouse cursor moving from graph tab

* Add cursor click on script in Drawer Graph tabs

* Add troubleshooting flow in tutorial

* Add step to show logs of failed step

* add step 7 to invite the user to fix by himself and se the new results

* Improve wording

* Nit improvements

* Nits

* Refactor

* Refactor

* Rename the tutorial

* Remove deleted file

* Improve wording

* Improve first step of troubleshooting flow tutorial

* Add tutorials to /tutorials page and create component

* Remove previous Flow tutorials

* Fixes, and improve tutorial button design

* Improve status in Tutorial button

* Align tutorial button to brand guidelines

* Add skip all to onboarding workspace tutorial

* Add skipped_all to tutorial_progress

* Connect backend and frontend for tutorial progress

* Add store and helper to display or not Tutorials from left menu

* Add reminder at the end of each tutorial

* Add tutorial banner

* Remove tutorials from elpty workspace

* Improve Tutorials page

* Align banner to guidelines

* Add reset tutorials buttons

* Refactor

* Refactor to make it easy to add new tutorials and tabs

* Improve tutorial config to make it easy to add new tutorials

* Refactor and remove hardcoded indexes

* Add getTutorialIndex in tutorial config file

* Nit

* Add Mark all as complete button in tutorial page

* Add skip tutorial button in banner toast

* Replace if else in tutorials router by map to make it easier to maintain and scale

* Delete broken simple app tutorial

* Add Guide flow guide buttons inside the Create Flow page

* Add flow editor tutorials into flow builder page

* Update existing app tutorials with new tutorial system

* Create a dedicated tutorial category for app editor

* Add global progress bar

* Add Reset & Skip at tutorial category level

* Add progress to tab title

* Nits on design

* Make progress bar a props and design nits

* Add active props for Tutorial Category

* Display tutorials according to the user role

* Adapt progress bar to the user role

* Add roles array for each tutorial

* Add Tutorials tab in Operator menu

* Edge case if no Category and no Tutorial available for my role

* Allow the user to reset a single tutorial

* Allow a user to mark as completed a single tutorial

* Nit on hoovering tutorial status

* Allow admins to see which tutorials are available per role

* Create utils that allow admins to see which tutorials can access other roles of their organization

* Refactor resetSingleTutorial and completeSingleTutorial into one function

* Improve role system

* Remove hardcoded MAX_TUTORIAL_ID

* Fix type assertion

* Remove console log

* Reduce recalculations when unrelated state changes

* Add console.error

* Remove unused function

* Add tutorial wrapper and better router

* Nits to pass npm checks

* Fix typescripts and lint errors

* Add SQLx query cache for tutorial_progress queries

* Improve wording for workspace tutorial

---------

Co-authored-by: Diego Imbert <diego@windmill.dev>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2025-12-08 16:42:35 +00:00
Diego Imbert df884e6135 Custom instance db password safety (#7313)
* update parsers version

* safety custom instance db migration

* Refresh custom instance pwd button

* nit indent

* nit button accent

* Prevent leave without saving
2025-12-08 16:35:39 +00:00
hugocasaanddieriba eb284dfabd feat: triggers suspended mode (#7297)
* first commit

* base

* ok

* remove print

* rm packe json

* fix discard

* fix

* update .sqlx

* update

* update ref

* jobs update

* nits

* update ref

* big

* update sqlx

* fix

* update

* nits and fix

* nits

* ok

* sqlx + fix import

* better

* nit

* suspended mode draft

* UI and http triggers

* nits

* done for http triggers

* feat: better retry/error handler check

* generalize to all triggers

* fix merge conflicts

* fix listener

* nits

* nit

* fix merge conflict

* update ee ref

---------

Co-authored-by: dieriba <dieriba.pro@gmail.com>
2025-12-08 16:20:49 +00:00
hugocasa bfe95a3d61 fix(frontend): add missing docs link for json schema resource in error (#7315) 2025-12-08 16:02:06 +00:00
Diego Imbert c5b5760e42 Fix reactivity issue on mute alerts btn (#7316) 2025-12-08 16:01:32 +00:00
Ruben Fiszel 340cfb718d add context7 2025-12-08 10:34:16 +00:00
Ruben Fiszel a89759bb74 cli app backcompatibility 2025-12-06 16:46:09 +00:00
Ruben Fiszel 0e63dd301f fix: raw app v0.5 (#7310) 2025-12-06 16:06:30 +00:00
Ruben Fiszel 61b412eef4 fallback for unknown asset kind 2025-12-06 10:26:54 +00:00
Ruben Fiszel d46012e26e exclude vscode from optimize deps 2025-12-06 10:15:38 +00:00
Diego Imbert 9bbab3321e feat: Data tables (#7226)
* data tables settings ui

* install runed

* zod 4 fixes

* use new toJSONSchema

* Migrate ducklake catalogs to more generic custom instance databases

* fix compilation

* Safety conversion for old duckdb ffi

* data tables settings

* ts client basis

* inline run works

* datatables work

* Revert "datatables work"

This reverts commit 6e1588d59e.

* datatables work (without leaking pg credentials)

* println

* separate sqlUtils.ts

* nit

* Separate custom instance db Select and Wizard components

* nit

* nit wording

* add tags to custom instance dbs

* error when trying to use ducklake as datatable or opposite

* show status in dropdown

* data table instance setup works

* sqk function for ducklake

* factorize logic

* fix temp reactivity

* Data table assetexplore

* Migrate S3 permissions to modal

* Revert "Migrate S3 permissions to modal"

This reverts commit 0631d03cb0.

* nit query -> fetch

* Custom instance setup new look

* run_language_executor separate fn

* run_inline param

* nit wording

* Better typed client

* Data tables display as assets in frontend

* asset db icon

* nit

* cleaner errors

* nit

* Fix sed calls in mac

* run_inline_script_preview in python client

* basic python datatable client

* datatable and datalake parser in python

* ducklake client python

* nit fix

* Fix migration producing NULL instead of {} when no custom databases

* merge conflict fail

* python ducklake client arg fix

* parse or infer sql types in ts client

* ts asset parser, detect datatable & ducklake R/W

* fix sql repl for other read ops than select

* export type SqlTemplateFunction

* rename list_custom_instance_pg_databases

* typecheck datatable and ducklake name in Typescript

* Fix typecheck datatable and ducklake in TS

* declare module overriding instead of extending

* infer_sql_type in python client

* SqlQuery object in python

* fix merge conflicts

* update const_format

* CI fix

* factor out to var_identifiers

* sqlx prepare

* unnecessary security (admin is required)

* clearer comment

* ee repo ref

* nit snake case

* claude step 1: detect var declarations

* move detect_sql_access_type to common mod

* claude step 2: detect when saved vars are queried

* Revert "claude step 2: detect when saved vars are queried"

This reverts commit 1e1f930568.

* Revert "claude step 1: detect var declarations"

This reverts commit f866f4819d.

* remove ducklake/datatable and default

* detect data table assigns in var_identifiers

* Python parser successfully infers R/W/RW from ducklake / datatable

* still register ducklake/datatable if not used as unknown R/W

* Go to settings button in Assets Dropdown on not found

* nit

* sqlx prepare fail

* manual fix, somehow sqlx prepare won't do it

* fix frontend ci

* ee repo ref

* ducklake_user doesnt exist in unit tests

* nit fix

* ui nit

* nit

* nit missing clone

* fork ducklakes and datatables

* fix surface hover bug

* stupid mistake

* better deeply reactive mutable derived

* Ducklake picker

* Editor bar data tables

* DuckDB supports datatables

* datatable in duckdb asset parser

* duckdb asset parser var_identifiers

* Revert "duckdb asset parser var_identifiers"

This reverts commit 88068b1a77.

* sqlx prepare

* Box pin in test_workflow_as_code to fix stack overflow

* go to settings button

* ee repo ref

* fix compilation

* wording nit
2025-12-05 23:08:58 +00:00
hugocasa 8897dab282 feat: configurable max ai agent iterations (#7302)
* feat: configurable max ai agent iterations

* nit

* increase limit
2025-12-05 18:31:36 +00:00
hugocasaandDevdatta Talele 2f0e00f9cf feat(frontend): add wildcard pattern support to MCP token custom scope (#7306)
* feat(mcp): add wildcard pattern support to token UI custom scope

- Add text input fields for wildcard patterns in Custom scope
- Combine wildcard patterns with individual script/flow selections
- Support comma-separated patterns (e.g., f/outline/*,f/docs/*)
- Add help popover explaining pattern syntax with examples
- Backward compatible: empty patterns preserve existing behavior

Closes #7252

* fix(mcp): apply critical code review fixes for wildcard patterns

Apply fixes identified by code-smells agent:

**P0 - Code Duplication (CRITICAL)**
- Extract pattern parsing logic into reusable helper function
- Eliminates duplicate code between scripts and flows processing
- Improves maintainability and consistency

**P1 - Button Validation (CRITICAL)**
- Fix button disable condition to allow pattern-only tokens
- Users can now create tokens with ONLY wildcard patterns
- Resolves Test Scenario #6 from design document

**P2 - State Management (MODERATE)**
- Add $effect to clear patterns when switching scopes
- Prevents stale data from persisting across mode changes
- Improves user experience and data consistency

Changes:
- Added parsePatterns() helper function
- Updated button disable condition with pattern checks
- Added two $effect hooks for state cleanup
- Reduced code duplication by 10 lines

Testing: All edge cases now properly handled including pattern-only tokens

* nits

* nit

---------

Co-authored-by: Devdatta Talele <devtalele0@gmail.com>
2025-12-05 18:14:03 +00:00
hugocasa a8d40733f4 fix(frontend): use right workspace script version in flow status (#7308) 2025-12-05 18:02:41 +00:00
Diego Imbert 7b1a8b0dce fix: improve S3 etag caching (#7301) 2025-12-05 18:01:27 +00:00
Ruben Fiszel cb44d94bc6 improve folder error 2025-12-05 17:12:31 +00:00
Ruben Fiszelandrubenfiszel 3ccdd51b9a chore(main): release 1.589.3 (#7305)
* chore(main): release 1.589.3

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
v1.589.3
2025-12-05 13:29:56 +00:00
Diego Imbert bbf1da8d26 Flate2 1.1.6 wouldn't compile (#7307) 2025-12-05 13:26:07 +00:00
Ruben Fiszel af70eed58d fix(cli): properly handle frontend scripts for app generate-locks 2025-12-05 12:37:35 +00:00
Ruben Fiszel 409c342ffd fix(app): fix appdatetimeinput in lists 2025-12-05 07:52:14 +00:00
Ruben Fiszel 97460304e9 fix: linked secret in resources must be of type string 2025-12-05 07:45:05 +00:00
Ruben Fiszelandrubenfiszel d6d093d342 chore(main): release 1.589.2 (#7295)
* chore(main): release 1.589.2

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
v1.589.2
2025-12-05 07:11:46 +00:00
centdix f0ff6f405d fix(flow): fix chat mode modal + toggle (#7296)
* use fixed for modals

* fix chat toggle
2025-12-05 07:05:55 +00:00
hugocasa c3044a5a9b fix(frontend): fix saved/past inputs loading when in json mode on the flow detail page (#7300) 2025-12-05 07:05:26 +00:00
Guilhem 0594257a25 fix(frontend): update workers page ui (#7264)
* Improve workers page

* Update group config drawer

* improve dirty workergroup config

* Make layout reactive

* fix section animation

* prevent opening dropdown while clicking New group config

* migrate workers page to svelte 5

* Open drawer upon adding a worker group

* nit critical alert table

* improve queue metrics drawer

* improve agent worker drawer

* harmonize copy icon

* improve agent worker doc

* improve layout

* Improve autoscaling event list

* Improve tags managment

* Remove default tags

* fix npm check

* Add info for agent workers

* improve agent worker jwt token creation

* Improve token display

* nit

* improve tag display

* create EE component

* nit

* harmonize tag overflow

* handle permission better

* improve env var presets

* handle permission for config

* nit alerts

* nit

* Improve custom tag creation in tag select

* optimistic tag addition

* nit

* nit

* fix typo

* improve workers table

* Group config tags

* show mismatch

* fix typo

* optimistic update when adding tag

* do not allow to create tag when picking a tag to watch in alerts
2025-12-04 22:09:25 +00:00
hugocasa 3757cbce87 fix: enable back gcp triggers in CLI (#7299) 2025-12-04 15:30:38 +00:00
Pyraandwindmill-internal-app[bot] 1dfb0f0078 refactor: move concurrency and debouncing settings to their own structs (#7286)
* move concurrency and debouncing settings to it's own structs

Signed-off-by: pyranota <pyra@duck.com>

* cleanup queue::jobs::pull

Signed-off-by: pyranota <pyra@duck.com>

* done

Signed-off-by: pyranota <pyra@duck.com>

* migrated the rest

Signed-off-by: pyranota <pyra@duck.com>

* implement todo!

* impmenet todo! v2

* more cleanup

* fix all

Signed-off-by: pyranota <pyra@duck.com>

* remove unrelated code

Signed-off-by: pyranota <pyra@duck.com>

* nits

Signed-off-by: pyranota <pyra@duck.com>

* do not serialize rawcode

Signed-off-by: pyranota <pyra@duck.com>

* cleanup

Signed-off-by: pyranota <pyra@duck.com>

* fixes

Signed-off-by: pyranota <pyra@duck.com>

* update ee repo ref

Signed-off-by: pyranota <pyra@duck.com>

* update ee repo

Signed-off-by: pyranota <pyra@duck.com>

* fix tests

Signed-off-by: pyranota <pyra@duck.com>

* Update ee-repo-ref.txt

---------

Signed-off-by: pyranota <pyra@duck.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2025-12-04 10:11:54 +00:00
e9f13065bf fix: show related job when deployment is in progress (#7294)
* feat: show related job when deployment is in progress

- Added job_id column to deployment_metadata table to track current deployment jobs
- Updated backend to store job_id when creating dependency jobs for scripts and flows
- Modified deployment status API endpoints to include job_id in responses
- Updated frontend to display clickable job link in "Deployment in progress" badge
- Added OpenAPI schema updates for new job_id field

Resolves #7293

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>

* update

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
2025-12-04 09:50:07 +00:00
Ruben Fiszel fcde732485 nit warning concurrency limit for deps 2025-12-04 08:22:31 +00:00
centdix 4410567977 chore(cli): remove unnecessary indentations in claude.md #7292 2025-12-04 07:34:32 +00:00
Ruben Fiszelandrubenfiszel 0c74253319 chore(main): release 1.589.1 (#7287)
* chore(main): release 1.589.1

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
v1.589.1
2025-12-03 19:22:40 +00:00
Ruben Fiszel 99b1ae2e03 fix: wmill app generate-locks (#7288)
* all

* fix(cli): wmill app generate-locks

* handle raw reqs

* handle raw reqs

* rework paths
2025-12-03 19:14:01 +00:00
Diego Imbert adfb7e809a fix column order set with s3 mode (#7289) 2025-12-03 19:09:18 +00:00
Ruben Fiszel 752e43e653 fix(backend): fix broken cancel selection/all 2025-12-03 18:05:31 +00:00
Ruben Fiszelandrubenfiszel d4c1be5b8b chore(main): release 1.589.0 (#7277)
* chore(main): release 1.589.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
v1.589.0
2025-12-03 17:51:21 +00:00
Ruben Fiszel d3564a0ffb fix(cli): handle better apps pushing back-compatibility 2025-12-03 17:49:25 +00:00
Ruben Fiszel 25460f6604 nit jsonschemaresource 2025-12-03 14:55:32 +00:00
Pyra 3050d42683 chore(flake): add gsed (#7283)
* chore(flake): add `gsed`

Signed-off-by: pyranota <pyra@duck.com>

* gsed -> gnused

Signed-off-by: pyranota <pyra@duck.com>

---------

Signed-off-by: pyranota <pyra@duck.com>
2025-12-03 13:48:25 +00:00
Pyraandwindmill-internal-app[bot] e15af78d93 feat: agent workers min version support (#7284)
* feat: agent workers min version support

Signed-off-by: pyranota <pyra@duck.com>

* update oapi

Signed-off-by: pyranota <pyra@duck.com>

* fix what claude wrote

Signed-off-by: pyranota <pyra@duck.com>

* final cleanup

Signed-off-by: pyranota <pyra@duck.com>

* change a bit

Signed-off-by: pyranota <pyra@duck.com>

* remove unsed import

Signed-off-by: pyranota <pyra@duck.com>

* run update_min_version periodically

Signed-off-by: pyranota <pyra@duck.com>

* Update ee-repo-ref.txt

---------

Signed-off-by: pyranota <pyra@duck.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2025-12-03 13:48:07 +00:00
Diego Imbert f8d56c3d3e fix surface hover bug (#7285) 2025-12-03 13:34:44 +00:00
Diego Imbert 25cbcb35c8 inspect suspendValue (#7179)
* temp inspect

* $inspect not work in prod
2025-12-03 10:06:49 +00:00
Ruben Fiszel 60d5ea8579 fix: get flow by id doesn't require path (#7278) 2025-12-02 19:45:30 +00:00
wendrul 2a841bb0e3 fix: Prevent running git sync on promotion mode repos for forks (#7276) 2025-12-02 17:26:58 +00:00
wendrul 37307fee59 update nix flake (#7275) 2025-12-02 17:25:34 +00:00
Ruben Fiszelandrubenfiszel 82d4e5edf1 chore(main): release 1.588.0 (#7270)
* chore(main): release 1.588.0

* Apply automatic changes

---------

Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com>
v1.588.0
2025-12-02 13:08:57 +00:00
Devdatta Talele 764e1e15f5 fix: configurable timeout for AI requests (#6497) (#7267)
* fix: configurable timeout for AI requests

Add AI_REQUEST_TIMEOUT_SECONDS environment variable (default 3600s)
to fix timeout issues with slow AI models like self-hosted Ollama.

Previously hardcoded at 300 seconds, causing legitimate long-running
requests to fail.

Fixes #6497

* docs(ai): add critical NGINX configuration warning

Add comprehensive documentation about reverse proxy timeout requirements.
Without proper NGINX/proxy configuration, connections will still timeout
at the proxy layer regardless of backend timeout settings.

Enhanced documentation includes:
- CRITICAL warning about proxy configuration requirement
- Example NGINX configuration snippet
- Explanation of proxy vs backend timeout interaction

This addresses the root cause in issue #6497 where logs showed
"upstream prematurely closed connection" indicating proxy-level timeout.

Part of #6497
2025-12-02 13:01:50 +00:00
a23d4f015a feat: add S3 support to download button and PDF preview components (#7271)
* feat: add S3 support to download button and PDF preview components

Add S3 object and s3:// URL support to AppDownload and AppPdf components,
following the same pattern used in AppImage component. Both components now:
- Handle partial S3 objects with storage and presigned URL support
- Handle s3:// URL format
- Construct proper API endpoints for S3 file downloads

Fixes #7240

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>

* handle policy + fix s3 picker

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2025-12-02 12:53:35 +00:00
Pyraandwindmill-internal-app[bot] 69c550bca6 fix(workspace-dependencies): implement better caching (#7273)
* fix(workspace-dependencies): implement better caching

Signed-off-by: pyranota <pyra@duck.com>

* Update SQLx metadata

* nits

Signed-off-by: pyranota <pyra@duck.com>

* spawn non blocking

Signed-off-by: pyranota <pyra@duck.com>

* nit

Signed-off-by: pyranota <pyra@duck.com>

* fix ci

Signed-off-by: pyranota <pyra@duck.com>

* fix issue

Signed-off-by: pyranota <pyra@duck.com>

---------

Signed-off-by: pyranota <pyra@duck.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2025-12-02 12:48:14 +00:00