Add a new "fileset" resource type that represents a collection of files
stored as a relpath→content map. This enables resource types to manage
multiple files (e.g., config directories, template sets) instead of just
a single file.
Backend:
- Add is_fileset column to resource_type table
- Update CRUD operations and workspace duplication to handle is_fileset
- Add integration tests for fileset resource types
Frontend:
- Add FilesetEditor component with file explorer + Monaco editor
- Extract shared FileExplorer component from RawAppSidebar (dedup)
- Add fileset toggle to EditableSchemaWrapper
- Show fileset editor in ResourceEditor and ApiConnectForm
- Show folder icon for fileset resource types in IconedResourceType
CLI:
- Support fileset resources in sync pull (expand to .fileset/ directory)
- Support fileset resources in sync push (reconstruct from directory)
- Handle !inline_fileset YAML tag in resource resolution
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: truncate long summary and path in SummaryPathDisplay
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: allow summary to shrink in flow editor top bar
Add min-w-0 to the SummaryPathDisplay wrapper in FlowBuilder so flex
shrinking works. Remove max-w cap on the wrapper so the summary can use
all available space. Remove w-full and max-w-md from the empty middle
schedule div that was stealing space even when empty.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* worker: support AIAgent tools in AI executor
* worker: complete nested AIAgent tool execution path
* worker: inline AIAgent tool schema usage
* fix agent action
* frontend: add AI Agent as tool type in flow builder
Add the ability to insert a nested AI Agent as a tool within another
AI Agent step. Includes type definitions, factory function, graph icon,
insert/event wiring, and a dedicated editor component.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: remove AiAgentToolEditor, reuse FlowModuleComponent for AI agent tools
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: populate all input transforms for nested AI agent tools
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: avoid missing v2_job_status error for nested AI agent tools
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* sqlx
* nit
* refactor: cleanup nested AI agent tool implementation
- Add max nesting depth guard (5) on parent chain traversal
- Reject 3+ level nesting explicitly with clear error message
- Remove unnecessary flow_step_id tuple scaffolding in tool dispatch
- Consolidate get_value() calls using borrow in first match
- Replace unsafe `as unknown as FlowModule` casts with agentToolToFlowModule()
- Simplify toolKind ternary chain with .includes() lookup
- Fix leftover over-indentation from tuple removal
- Remove duplicate doc comment on is_completed_input_transform
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: pass flow_step_id and flow_job_id overrides to run_agent for nested AI agents
For nested AI agent tools, job.flow_step_id is None and job.parent_job
points to the parent agent instead of the flow. This caused memory
read/write and flow context resolution to silently fail.
handle_ai_agent_job already computes the correct flow_step_id (via
runnable_path fallback) and flow_job_id (via parent chain traversal).
This change threads those values through run_agent and
ToolExecutionContext so all downstream consumers use the correct IDs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* cleaning
* cleaning
* move const
* fix
* refactor: replace defaultToAi boolean with allowedAiTransforms whitelist
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: propagate root_job at push time, remove flow_job_id_override
Instead of threading flow_job_id_override through run_agent and
get_flow_context, propagate root_job and flow_innermost_root_job
when pushing tool jobs so nested AI agents can find the flow
job naturally via the existing job fields.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: simplify nested AI agent parent chain walk-up
Replace the generic depth-limited loop with a single-level check since
only flow → agent → nested agent tool is supported. Remove
MAX_AGENT_NESTING_DEPTH constant and flatten the module lookup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: reject 3+ level nested AI agent tools before job creation
Check at the parent agent level whether a nested AIAgent tool contains
AIAgent sub-tools. If so, return a fatal error immediately, preventing
the sub-job from being created and avoiding retry loops.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: resolve deadlock in nested AI agent tool execution
Replace channel forwarding with inline DB writes for tool job
completions. Nested agents used bounded(1) channels where a sub-tool's
forwarded result would fill the parent channel, leaving no room for the
agent's own completion — causing a deadlock. Writing directly via
add_completed_job/add_completed_job_error bypasses the channel entirely.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add light mode support for navigation sidebar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: use custom selected background for sidebar items
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: darken sidebar section separators in light mode
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: lighten sidebar bg to #F3F3F7 and use border-light for separators
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: use text-secondary for sidebar labels and text-hint for icons
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: extract dark sidebar background color to constant
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cli): add consistent get/list/new subcommands for all item types
Make the CLI consistent so every item type (script, flow, app, resource,
resource-type, variable, schedule, folder, trigger) supports get/list/new
subcommands, enabling the CLI to be used as a full API client in bash
scripts with jq piping.
- Add --json flag to all list commands for machine-readable output
- Register explicit "list" subcommand alongside default action
- Add "get <path> [--json]" subcommand to fetch single items from API
- Rename "bootstrap" to "new" for script/flow, keep "bootstrap" as alias
- Add "new" subcommand for resource, resource-type, variable, schedule,
folder, and trigger to create local template YAML files
- Update cli-commands skill documentation for wmill init
- Add integration tests for all new commands
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* all
* feat: install wmill CLI in Docker images and use it for bash variable/resource access
- Install windmill-cli via bun in all Dockerfiles that include bun
- DockerfileCli: switch from node:slim to oven/bun:slim
- CLI: auto-configure from WM_WORKSPACE/WM_TOKEN/BASE_INTERNAL_URL env vars
as last-resort fallback when no workspace is configured
- Frontend: replace curl-based bash snippets with wmill variable/resource get
- Add backend integration tests for wmill CLI in bash scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(ci): install windmill-cli in backend test workflow
Ensures wmill is available on PATH for bash integration tests
that use `wmill variable get` and `wmill resource get`.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(cli): replace @std/* Deno dependencies with Node.js equivalents
Replace @std/log with a lightweight custom logger (core/log.ts),
@std/path with node:path, and @std/yaml with the yaml npm package.
Also fix process hang on exit, add --node option to install_dev.sh,
and add missing hasRequiredPermissions to NpmProvider.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* all
* all
* all
* refactor(cli): replace @ayonli/jsext and @std/encoding with lightweight alternatives
Replace @ayonli/jsext (8.4MB) with tar-stream (32kB) for tar creation,
replace @std/encoding with Node.js Buffer.toString("hex"), and fix
@windmill-labs/shared-utils to use direct npm instead of JSR mirror.
Also resolve merge conflicts in sync.ts and fix pre-existing type errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cli): use singleQuote YAML output and pass yamlOptions in gitsync pull
The yaml library defaults to double quotes, but the codebase (and tests)
expect single-quoted strings. Add singleQuote: true to yamlOptions and
pass yamlOptions to gitsync-settings pull writeFile calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* all
* all
* fix(cli): address code review feedback
- Install CLI from source in backend tests instead of npm
- Fix script bootstrap catch block to re-throw "File already exists"
- Add type-safe local variable after trigger kind validation
- Use created_by instead of policy.on_behalf_of for app get output
- Note --kind is recommended for faster trigger lookup in help text
- Document node symlink purpose in Dockerfiles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(ci): use /usr/bin for wmill wrapper to ensure it's in PATH
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(ci): install wmill to ~/.local/bin to avoid permission issues
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* ci(backend): switch to Blacksmith runner and add cargo caching
- Switch from ubicloud-standard-16 to blacksmith-16vcpu-ubuntu-2404 for faster NVMe-backed builds
- Add stickydisk for cargo target directory (persistent NVMe cache across runs)
- Add cache for cargo registry and git dependencies
- Upgrade DuckDB FFI cache from actions/cache@v3 to useblacksmith/cache@v1
- Enable CARGO_INCREMENTAL=1 to benefit from persistent target cache
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix ci
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix: pass flow path in flow step preview for AI agent modules
JobLoader.runFlowPreview was missing the path parameter, causing
WM_FLOW_PATH to be unavailable when using the Run button on individual
flow steps. Test up to here worked correctly because it uses a
different code path (utils.svelte.ts) that already passed the path.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: make WM_FLOW_PATH available for rawscript/script step previews
Inject the flow path as `_flow_path` in the job args when running a
script preview from the flow editor. The SQL pull queries now use
COALESCE to fall back to this arg when no parent runnable path exists,
making WM_FLOW_PATH available for individual step "Run" previews.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: rename _flow_path args key to _FLOW_PATH
Match existing convention used by _ENTRYPOINT_OVERRIDE.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add .npmrc support for private npm registries
Add a new `npmrc` instance setting that accepts full .npmrc file content
for configuring private npm registries. Works with bun (native .npmrc
support since 1.1.18), deno (native .npmrc support in 2.x), and the npm
proxy (parses default registry + auth token from .npmrc).
Legacy `npm_config_registry` and `bunfig_install_scopes` fields are now
hidden when empty, so new users only see the .npmrc field. Also fixes a
pre-existing race condition where gen_bunfig was called after
start_child_process.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* all
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add breadcrumb navigation to advanced setup mode on first-time page
The advanced setup mode on /user/first-time lacked a step indicator,
making navigation disorienting. This adds a 2-step breadcrumb
("Settings" / "Root login & Resource Types") with step-aware navigation
buttons and extracts the account setup UI into a reusable snippet shared
by both wizard and advanced modes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address review issues in advanced setup breadcrumb
- Gate resource type sync by mode to prevent early trigger
- Reset yamlMode when advancing to account setup step
- Allow forward navigation via breadcrumb click
- Use saveAndProceed on Back button for consistency
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: show EE license key warning in advanced setup mode
Generalize proceedFromCore to trigger the license key warning when
leaving the settings step in both wizard (step 0) and full mode
(fullStep 0), including the Continue button and breadcrumb forward
navigation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: independent scroll for sidebar and content in advanced setup
Match the superadmin settings drawer pattern: the outer flex container
constrains height without scrolling, while the sidebar and content area
each have h-full overflow-auto for independent scrolling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* format
* fix: simplify breadcrumb onselect to only handle backward navigation
The Breadcrumb component disables forward buttons, so the proceedFromCore
branch was unreachable. Simplify to only handle i < fullStep.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): prevent false dirty state in instance settings on load
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): handle undefined python version in select binding
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(frontend): extract SaveButton component and improve drawer header UX
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(frontend): replace inline diff with diff drawer and simplify save flow
Save now saves immediately instead of requiring a two-step confirm flow.
Diff view opens in a separate drawer with split/unified toggle instead of
replacing the form content inline.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): preserve dirty state when toggling YAML mode in instance settings
syncFormToYaml() was setting yamlCodeInitial to the current modified YAML,
causing hasUnsavedChanges to become false when entering YAML mode with
pending form changes. Build yamlCodeInitial from initialValues instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): clear dirty state after saving in YAML mode
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* reduce save button timeout
* feat(frontend): add review changes button to unsaved changes confirmation modal
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix(frontend): address code review issues from PR #8002
Remove unnecessary IIFE wrappers in handleSave/handleSaveAndCloseDiff,
fix stale on:close reference on diff drawer, clip SaveButton overlay with
overflow-hidden, make DiffEditor respond reactively to inlineDiff prop
instead of using {#key} destroy/recreate, and revert normalizeValue
object check to original simpler behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): remove tab-switch confirmation modal in full settings mode
In full mode, the save button saves all settings across all categories,
so switching tabs cannot lose unsaved changes. Remove the per-category
dirty check, confirmation modal, and unused ConfirmationModal import.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): prevent SMTP toggles from creating false dirty state
Use getter/setter bind:checked so Toggle reads undefined as false
without writing it back to the store. This prevents visiting the SMTP
tab from mutating smtp_settings and triggering a false unsaved diff.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): prevent OTEL toggles from creating false dirty state
Same fix as SMTP toggles: use getter/setter bind:checked so Toggle
reads undefined as false without writing it back to the store.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor(frontend): use recursive normalizeValue for dirty state instead of per-component fixes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor(frontend): replace save button with always-visible review changes button
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix(frontend): address PR review comments on DiffEditor and SaveButton
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add fuzzy search to instance settings sidebar
Adds a search input at the top of the superadmin settings sidebar that
uses uFuzzy for fuzzy matching against all setting labels, descriptions,
and categories. Selecting a result navigates to the correct tab and
scrolls to the specific setting card with a brief highlight.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: improve settings search display and description matching
- Extract only the label portion from uFuzzy highlighted text for
cleaner dropdown display
- Show description only when the match is in the description and NOT
in the label
- Truncate descriptions to 80 chars in searchable items
- Add maxHeight prop to SelectDropdown for configurable height
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: fix search description truncation and handle undefined marked values
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: remove description from settings search dropdown
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add smooth outline transition for setting highlight animation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: highlight first search result by default for enter-to-select
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* nit
* clean code
* fix: address review feedback - sanitize html, remove max-w-40, document description field
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: constrain search dropdown width to prevent long title overflow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* perf: add 150ms debounce to settings search filter
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: clean up timeouts on destroy and re-invocation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: extract settings search into reusable SettingsSearchInput component
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: use twMerge for class prop in SettingsSearchInput
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: wrap debounced state write in untrack to prevent re-triggering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: promote license key to second field in setup wizard and warn on EE without key
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove screenshots from PR branch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use positive EE check with startsWith instead of negative CE check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude-agent <claude-agent@noreply>
* fix: default automate_username_creation to true when setting is missing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* latest ref
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: replace native select with custom Select in FolderPicker
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: update ee-repo-ref to 592848d59ca2304926fb2bd85d000668a7f46a77
This commit updates the EE repository reference after PR #420 was merged in windmill-ee-private.
Previous ee-repo-ref: 931813b75b8260faa13ddc07f36a11607b7e3bf6
New ee-repo-ref: 592848d59ca2304926fb2bd85d000668a7f46a77
Automated by sync-ee-ref workflow.
* nit
* fix(frontend): edit button in folder picker dropdown should not select the item
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: restore ee-repo-ref.txt to match main
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): clean up FolderPicker review nits
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update frontend/src/lib/components/FolderPicker.svelte
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
* fix(frontend): add folder name validation and error handling to folder picker
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): add loading state to folder picker select
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): add error toast for folder list loading failure
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): reassign userStore folders array to trigger reactivity
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): preserve flow settings when updating summary/path from detail page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor(frontend): type builders prop with ReturnType<typeof createDropdownMenu>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor(frontend): extract shared updateItemPathAndSummary utility to deduplicate move/rename logic
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): enable inline summary/path editing on script detail page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* improve layout
* feat(frontend): add dirty tracking to MoveDrawer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* nit move drawer
* fix(frontend): drop on_behalf_of_email from move/rename and warn user about redeployment
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): hide on_behalf_of warning in MoveDrawer when user is not owner
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(frontend): only reload script when path unchanged in onSaved callback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Show custom_instance_pg_databases, ducklake_settings, ducklake_user_pg_pwd
and rsa_keys in frontend YAML editor (remove from excludedKeys)
- Redact sensitive values: add ducklake_user_pg_pwd and rsa_keys to
sensitiveKeys, add custom_instance_pg_databases.user_pwd to
nestedSensitiveFields
- Remove rsa_keys from HIDDEN_SETTINGS so it appears in YAML export
- Hide automate_username_creation from export (add to HIDDEN_SETTINGS)
- Add ducklake_user_pg_pwd and rsa_keys to SENSITIVE_SETTINGS for log
redaction
- Generalize empty/null protection for all PROTECTED_SETTINGS: operator
diff skips empty values when DB has existing data, direct API rejects
delete/empty for protected settings
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* allow editing flow/script summary
* feat(frontend): wire up edit summary/path on flow detail page
- Fix on:click → onclick (Svelte 5) and add title on Save button
- Make can_write reactive ($state) so onEdit prop updates correctly
- Wire onEdit in flow detail page to call FlowService.updateFlow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): use Path component for path editing in detail page header
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(frontend): extract SummaryPathDisplay component with edit popover
Consolidate the summary+path display and edit popover into a reusable
SummaryPathDisplay component, used in both the detail page header and
the flow editor toolbar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): add size prop to Path/FolderPicker, compact popover
Add size prop ('sm' | 'md') to Path and FolderPicker components,
passed through to ToggleButton, TextInput, and Button children.
Use hideFullPath and size="sm" in the SummaryPathDisplay popover
for a compact inline path editor. Widen popover to 480px.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix add folder in path editor
* fix(frontend): disable focus trap on edit popover for drawer access
Disable melt-ui's focus trap on the SummaryPathDisplay popover so
that inputs inside drawers (e.g. New Folder) can receive focus.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* nit
* feat(frontend): auto-create folder and render drawer above popover
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): show placeholder and hover-reveal pencil in SummaryPathDisplay
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): click-to-edit SummaryPathDisplay with inline layout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(frontend): move undo/redo and tutorials into dropdown submenu with notification dot
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(frontend): stack path above summary in SummaryPathDisplay
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(frontend): bind summary/path directly in flow builder popover
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* nit
* chore: add PR screenshots (to be removed before merge)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: remove PR screenshots (moved to release assets)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix: mark base_url as unsaved when using browser fallback in instance settings
When base_url is not set in the database, the frontend silently fills in
window.location.origin but also snapshots it as the initial value. This
makes the dirty-check see no change, so the Save button stays disabled
and the user cannot persist the auto-detected value.
Fix by snapshotting initialValues before applying the fallback, and show
a yellow warning indicating the value is auto-detected and unsaved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: render base_url fallback warning inside the setting card
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: allow adding workspace scripts and flows as AI chat context
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* cleaning
* cleaning
* cleaning
* better
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: add CRD configuration hints to instance settings and workers pages
Add subtle text notes with doc links to help K8s users discover that
instance settings and worker group configs can be managed via the
WindmillInstance CRD.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: IaC hints, YAML editor for worker configs, and EE badges
- Move IaC hint from form view to YAML mode in Instance Settings
- Add YAML editor drawer for worker group configs with diff review
- Add EE-only badges to gated fields in worker config drawer
- Make init_bash available in CE (frontend + backend gate)
- Promote Init/Periodic scripts to top-level sections
- Add "YAML editor" button to worker config drawer action bar
- Strip cache_clear and empty fields from YAML output
- Sort default/native groups first in YAML editor
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address PR review feedback on worker YAML editor
- Extract serializeWorkerGroupsAsYaml() shared helper (dedup)
- Fix name:undefined leak using proper destructuring
- Protect default/native groups from accidental deletion
- Add loading indicator during YAML save
- Add restart warning for periodic script changes
- Use consistent on:click event syntax in YAML drawer actions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: use onClick prop instead of on:click for Button components
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Move K8s operator source code (crd, db_sync, reconciler, resolve) to
windmill-ee-private and gate behind feature = "private". OSS stubs
provide error messages when the feature is disabled.
Add an info Alert banner in the Registries settings section when no
enterprise license is active.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: gate private registry configuration behind enterprise feature
Add read_ee_registry<T> helper that returns None and emits a job log
in CE builds when a private registry is configured. Applied to all
language executors: pip, npm/bun, deno, cargo, go, maven, nuget,
powershell, and ruby. Maven settings.xml file write in monitor.rs
is also gated.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: open-source worker group configuration UI
Allow CE users to create worker group configs and edit worker_tags.
EE-only features (dedicated workers, custom env vars, init/periodic
scripts, autoscaling, priority tags, etc.) remain gated behind the
enterprise license in the UI. Backend now filters CE config updates
to only allow worker_tags and cache_clear fields instead of rejecting
the entire request.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>