* feat: add workspace success handler with 60s TTL caching
Add a new workspace-level success handler that triggers when jobs complete
successfully, similar to the existing error handler. Key features:
- Database migration adds success_handler and success_handler_extra_args columns
- API endpoint for configuring success handler in workspace settings
- 60s TTL caching to avoid DB trips when checking handler existence
- Handler only triggers for top-level Script/Flow/SingleStepFlow jobs (not previews)
- Frontend UI with ScriptPicker and "Create from template" button for bunnative scripts
- EE warning alerts for CE users on success handler and critical alerts sections
- Backend tests for cache behavior and settings CRUD operations
The success handler receives: path, email, result, job_id, is_flow, workspace_id,
and started_at. It runs as the g/success_handler group.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: update RawCode struct in tests to use new field names
Update test to use ConcurrencySettingsWithCustom and DebouncingSettings
instead of the deprecated individual fields.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update backend/windmill-api/src/workspaces.rs
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
* test: improve success handler test to verify job creation
Update test_success_handler_triggered_on_success to actually verify that:
- A success handler job is created in v2_job table
- The job has the correct runnable_path (configured script)
- The job runs as success_handler@windmill.dev
- The job has correct parent_job and root_job references
- The trigger starts with 'success.handler.'
This provides better test coverage for the success handler feature.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: fix success handler test and root_job parameter
- Fix test to use JobPayload::ScriptHash (JobKind::Script) instead of
JobPayload::Code (JobKind::Preview) since previews don't trigger handlers
- Add required 'lock' column to script inserts for deployed scripts
- Fix duplicate lines in workspaces.rs
- Set root_job correctly in push_success_handler
- Update test assertions to match actual behavior (root_job optimization)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* sqlx
* refactor: reduce duplication in workspace handler cache logic
- Extract database queries into fetch_error_handler_from_db and
fetch_success_handler_from_db helper functions
- Use shared WORKSPACE_HANDLER_CACHE_TTL_SECONDS constant for 60s TTL
- Reduces code from ~116 lines to ~54 lines while maintaining identical behavior
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add cache propagation warning to workspace success handler UI
Note that changes may take up to 60 seconds to propagate due to caching.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
* fix: teams, need both guid and thread id format
* chore: update ee-repo-ref to 576abf6519d1aa12a2b989a58a123501206284fb
This commit updates the EE repository reference after PR #368 was merged in windmill-ee-private.
Previous ee-repo-ref: ae41589212f16ff0cec8516c66227f30e17c5564
New ee-repo-ref: 576abf6519d1aa12a2b989a58a123501206284fb
Automated by sync-ee-ref workflow.
---------
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
* fix(backend): put for loop itered in a separate table
* Update SQLx metadata
---------
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
* feat: Add workspace diff viewer and deployment UI for forked workspaces
- Add backend endpoint for comparing two workspaces
- Implement comparison logic for scripts, flows, apps, resources, variables
- Create ForkWorkspaceBanner component to detect and display fork status
- Build WorkspaceComparisonDrawer for detailed diff viewing and deployment
- Add DiffViewer component for line-by-line comparisons
- Support bidirectional deployment (fork to parent or parent to fork)
- Add conflict detection for items that are both ahead and behind
- Include delete fork option when no changes remain
Note: Backend implementation requires sqlx prepare to be run for full functionality
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
* Fix banner and use wworkspace_diff table
* satisfactory UI WIP
* UI complete
* Deploy button
* Comaprison and reset tally
* compare all types of items
* Show summaries
* Disable buttons during deployment
* Auto select all on entering page
* Change migration to have 'exists_in' cols
* Show new and deleted items
* frontend fixes
* Block delpoyment if changes don't match (new chagnes detected)
* Message to block whe changes are behind
* Skip workspaces pre-migration
* Remove unused code
* Fix apps comparison
* Only return changes where user has visibility
* No deploy button if no access to all changes
* Prepare sqlx
* Remove redundant message
* CI: update ee repo ref
* eereporef bis
* Small tweaks
* Remove unused struct
* Remove unused refactor component
* Fix npm run check
* Remove unused component
* chore: update ee-repo-ref to bbf406edc222199ca2e6076da12c376fb4ff28c5
This commit updates the EE repository reference after PR #359 was merged in windmill-ee-private.
Previous ee-repo-ref: 6aae845c5629ae32da43dbfbdc4566e5bf90fb1e
New ee-repo-ref: bbf406edc222199ca2e6076da12c376fb4ff28c5
Automated by sync-ee-ref workflow.
---------
Co-authored-by: claude[bot] <209825114+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>
* 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
* stash
* sql asset parser parses most s3 literals
* nit
* Detect attach + handle returning RW
* detect assets used with dot notation
* detect implicit access with USE dl; syntax
* Add assets as unknown if var was never used
* Support default ducklake/datatable main in parser
* ignore asset parsing errors in frontend (avoid flow layout shift)
* super weird duplication (merge conflict ?)
* nits
* fix duckdb parser detecting too much as asset when RW ctx is unknown
* fix transparent assets btn
* missing arg
* nit styling
* asset parser specific table parsing
* fix resource specific table parsing
* More concise asset display in flows + better icons
* fix assets page filtering out resources with added table
* Fix frontend to support specific table assets
* Open DB Manager to specific table
* Specific table parser in Python and TS + unit tests
* Fix UPDATE setting access to None
* fix flow edge rendering on top of output picker
* python parser fix var override bug
* add ts test
* fix compilation
* sqlx prepare
* update parsers version
* fix missing schema key onDelete
* 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>
* 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
* 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>
* Add note component
* save note size and position
* move add note button up
* nit
* Add markdown support
* wip
* fix add sticky note button
* fix text update
* Add sticky note to saved flow data
* add note color picker
* Introduce node multiselect
* Add group notes
* Adapt layout to group node
* create a note manager class
* clean reactivity
* clean
* improve adaptive layout to group note
* modify layout based on cached text height
* fined grained graph rendering for notes
* separate noteManager into editor and render
* separate noteManager into editor and render
* create a note change observer
* render note node from context
* simplify note state managment
* show note in flow viewer
* clean dirty changes
* clean selection manager
* fix layout check
* improve bg surface select
* Handle z-index for stacked group notes
* clean selection manager
* exclude notes from rect select
* Allow switch between selection modes with keyboard keys
* improve selection box styling
* prevent dragging note when editing
* nit
* Simplify selection using svelte flow built in feature
* handle note selection separately
* Add min size for notes
* improve selection toggle
* improve mode switch
* make size and position optional for group notes
* Improve initial viewport position
* Add context menu for the canevas
* nit
* Add node context menu
* improve note select
* use clickoutside for note deselect
* use pointerdown outside to close context menu
* nit
* fix selection issues
* make edges non selectable
* improve color palette
* fix backend
* fix backend check
* cargo lock restore
* Add toggle to display notes
* fix note selection
* nit
* account for css offset in for loop
* fix multiple selection pannel styling
* clear flow selection when creating note
* Improve placeholder and note default text
* Escape note edit mode when pressing Esc
* Allow note edition in local dev
* clean
* Handle subflow selection
* prevent group note resizing
* nit
* allow notes in flow expand
* Improve multi select panel
* Allow context menu in note mode
* Add event listenner to fix pane click deselect
* prevent zoom in text area in notes
* improve bounding box styling
* Use control for box selection for non mac users
* nit
* clean notes groups
* nit
* use portal for note actions
* handle assets node when computing note layout
* Simplify layout compute for notes
* use smart color choice for notes
* Switch display note when adding a new note
* clean code
* improve group note bound size calculation
* simplify AI tool nodes and asset handling
* nit
* nit
* improve flow centering
* create group note button
* Improve selection of nodes
* Revert "Improve selection of nodes"
This reverts commit d2c40d82b1.
* refert backend changes
* nit
* improve graph selection
* clean
* make backend work except job runs
* fix notSelectable
---------
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>