* feat: edit variables, resources and triggers in their own session tab
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: take a trigger's flow kind from its config and name the written trigger
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: one operating-workspace context for editors acting on a session's workspace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: reload page item tabs only in sessions acting on the tool's workspace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: resolve open in workspace for every preview tab kind in one place
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: guard every component under a session editor against the navigation workspace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: show a page item tab whose item is gone instead of mounting its editor
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: follow a saved page item in the tab's own workspace and restore in-frame rows
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: close a page item tab from its editor header
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: judge trigger permissions by the user acting in the session workspace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: judge every session-editor permission by the user acting in that workspace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep session permissions reactive to the acting role and restore tabs as last seen
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: default Path's owner controls to the user acting in its workspace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
* feat: render an AI agent result as its answer, not as raw JSON
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: sanitize agent markdown through the shared plugin chain
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: fold agent stream events incrementally per poll
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: separate the agent meta line from the result toggle group
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: add a transcript view of an agent run's conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: retire AIAgentLogViewer in favour of the transcript
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: show the partial transcript a max-iterations failure carries
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: move the agent meta line and system prompt below the conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: show an agent run as what it did, not as a conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: name the agent run breakdown a trace
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(ai-agent): label the save-as-agent form fields per the guidelines
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(ai-agent): reuse the resource form's path and description fields
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(ai-agent): keep the action tags on a max-iterations failure
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(ai-agent): keep offline replay inert and the streamed answer to one turn
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(ai-agent): reset the streamed answer on providers that skip tool_call
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: carry the event type narrowing through the stream parser
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: survive a malformed message rather than take the viewer down
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: coerce agent messages once at the parse boundary
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: show an agent run as one scroll ending in its output
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep every streamed turn instead of dropping the narration
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: share the chat divider and drop the unsafe run auto-scroll
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: give the labelled divider a border colour and the standard pretty icon
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: pad the agent run below its badges as well as above
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: follow a streaming run's pane without moving the page
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: share the chat's stick-to-bottom mechanics with the agent run
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: keep the answer's citations and end a turn's reasoning with the turn
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: read the agent stream through the windmill-chat sdk parser
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: show an agent run's thinking instead of falling back to raw json
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: stop a stream the fold cannot use from claiming the run pane
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: identify an agent run by more than the job id the replay withholds
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: drop the tests and comment lines that were not earning their place
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix: stop a streamed turn's text shifting when a tool call closes it
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor(recordings): build recordings from the completed run instead of live event capture
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(recordings): budget and isolate replay synthesis against hostile recordings
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(recordings): capture full logs and the run-time flow, upgrade v1 files
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(recordings): pick an existing run for the hub recording
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(recordings): cap recorded logs under the replay loader's text budget
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(recordings): pin picked runs to their executed version, keep v1 streamed logs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(recordings): bound pipeline finalize fan-out, pin flow schema to run version
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(recordings): warn on mixed-version fallback, bound code fetches
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Add the ability to record a flow test execution and replay it offline
without any API calls. This is useful for debugging, sharing, and
reviewing flow executions outside of a running Windmill instance.
Recording:
- "Test flow & record" option in the flow editor three-dots menu
opens the test drawer in recording mode
- While in recording mode, running a test captures all job events
(SSE streams, sub-job completions, flow status transitions) along
with the flow definition into a downloadable JSON file
- Recording state module (flowRecording.svelte.ts) manages active
recording/replay instances at the module level
Replay:
- Standalone /replay page where users upload a recording JSON file
and watch the flow execute with real-time status transitions
- FlowRecordingReplay component handles timestamp rebasing, event
ordering fixes, and drives FlowStatusViewer with recorded data
- JobLoader intercepts replay mode to feed recorded events via
timed callbacks instead of real SSE/polling
- FlowStatusViewerInner and FlowLogViewer guard all API call sites
to prevent network requests during replay
- Job links, log downloads, and resource lookups are suppressed
in replay mode
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* draft mcp client
* testing
* fix
* cleaning
* mcp resource in inputtransforms
* cleaning
* big cleaning
* cleaning
* no arc
* add utils file
* refactor tools
* add mcp actions
* draft frontend
* send arguments from backend
* better frontend
* cleaning
* use token for auth
* add logo
* rm
* fix
* fix
* chore: refactor mcp for ai agents (#6829)
* Add Tool enum for AIAgent with backward compatibility
- Created Tool enum that can be either Windmill (FlowModule) or Mcp (resource reference)
- Created McpToolRef struct to hold MCP resource path
- Implemented custom Deserialize for Tool with backward compatibility:
- New format: {type: 'windmill'|'mcp', ...}
- Old format: FlowModule objects (automatically wrapped in Tool::Windmill)
- Updated AIAgent to use Vec<Tool> instead of Vec<FlowModule>
- Updated FlowValue::traverse_leafs to handle Tool enum
- Backward compatible: old flows with Vec<FlowModule> will deserialize correctly
* Refactor AI executor to process Tool enum instead of extracting MCP from input_transforms
- Separate Windmill tools and MCP resource paths from tools list
- Process Windmill FlowModules into Tool definitions
- Load MCP tools from resource paths in Tool::Mcp variants
- Remove old logic that extracted mcp_resources from input_transforms
- Import FlowModule, remove unused InputTransform
- Fix type issues: use .as_str() for path and handle Option<bool> properly
* handle in args
* mcp as flowmodule
* frontend
* config for mcp
* simplify logic
* fix ai executor logic
* cleaning
* clean frontend
* fix
* better resource picker
* fix and styling
* add endpoint to fetch tools
* apply tool filtering
* fix name validation
* better ui
* use cache
* fix
* fix merge
* refactor: Separate MCP tools from FlowModule in AIAgent
- Add new AgentTool, ToolValue, and McpToolValue types
- Update AIAgent to use Vec<AgentTool> instead of Vec<FlowModule>
- Implement From traits for clean conversion between AgentTool and FlowModule
- Add backward compatibility via custom deserializer for AgentTool
- Simplify resolve_module logic by reusing existing resolve_modules function
- Update traverse_leafs to handle AgentTool structure
This refactoring separates MCP tools from FlowModule tools, making the
type system clearer and eliminating the need to treat MCP servers as
a special case of FlowModule.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: Update ai_executor and worker_lockfiles for AgentTool
- Update ai_executor.rs to handle new AgentTool structure
- Separate MCP tools from FlowModule tools using ToolValue enum
- Convert AgentTool to FlowModule for backward compatibility
- Add imports for AgentTool and ToolValue types
- Update worker_lockfiles.rs for lazy loading optimization
- Convert AgentTool <-> FlowModule in insert_flow_modules
- Preserve lazy loading for FlowModule tools via modules_node
- Keep MCP tools inline (lightweight, no need for lazy loading)
- Maintain backward compatibility with existing flows
This enables the lazy loading optimization for FlowModule tools while
keeping MCP tools inline, balancing performance and simplicity.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* cleaning
* adapt frontend
* cleaning
* cleaning
* type fix
* cleaning
* fix back comp
* move mcp button position
* nit
* cleaning
* fix nested removal
* cleaning
* opti
* fix chat markdown display
* fix chat messages layout
* fix back comp frontend
* fix deserializer
* nit
* simpler serializer
* use if else
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Fix flow time display
* Make compute timeline a separate component
* Add timeline to log viewer
* Add timeline for subflows
* remove debug log
* fix progresion display while running
* Handle loop iteration
* nit
* Display all iteration for loops
* Show total execution time for loop steps
* Show subflow timeline
* Do not hightlight selected iteration
* Add subflow duration and starting time
* Allow zoom on subflow timeline
* Show execution time
* Improve timeline layout
* nit
* hover effect
* add show timeline toggle
* reset log viewer state when job id changes
* Display history loader in flow preview
* handle branch one
* reset timeline on jobId change
* nit
* fix branch chosen default
* improve time display
* improve look v1
* improve look v2
* Allow loading of more iterations when limit is reached
* fix display
* Add tooltip
* Use popover to display durations
* allow select iteration from timeline
* remove debug log
* fix iteration to index for long loops
* select iteration based on id
* Use localModuleState to get current display job ids
* clean subflow job creation
* improve subflow fetching
* fix load more position
* improve parallele display
* clean
* Add color status
* remove unwanted change
* prevent toggle expand on click timeline
* fix expand running module
* make timeline optional
* prevent running flow be marked as error
* Fix width jump during execution
* fix typo
* nit
* Use a class for timeline computation
* nit
* prevent navigation in the flow when the preview is open
* keyboardNav with registration link
* Improve keyboard nav UI
* Focus log with keyboard nav
* Add native focus
* initialize focused on key down
* fix log expand not sticking
* Improve tree structure
* nit
* nit
* Update active section on click
* add tooltip for keyboard navigation
* feat: ai agent steps base
* better backend and graph
* feat: anthropic, log viewer
* nit
* fix(frontend): hide tool nodes from timeline
* move ai agent actions from flow status to flow status module
* nits and workspace/hub scripts support
* tmp ref
* fix merge
* feat: display agent tools status in the graph
* fix reactivity
* fix flow status
* nit
* fix(frontend): fix bad log tree build
* remove entry structure to use modules as input for log tree
* clean
* fix typo
---------
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>
* componentize detail module
* Add logs tab
* add flow log viewer
* fetch logs
* handle subflows
* add forloop iteration picker
* polish
* expand steps log by default
* move logic handling to wrapper component
* improve iteration picker
* clean code
* polishing
* Add flow start and flow end rows
* fix infinite loop
* nit
* use list instead of table
* use custom id for collapsing subflow
* remove debug logs
* Use status dot instead of text
* fetch log from moduleState
* wip
* only fetch subflow jobs from cache if job is completed
* Add job polling for expanded steps
* handle subflows
* Init logs for steps
* update localModuleState logs
* use selected iteration from local module state
* handle branchone
* Add branch one and branch all label
* remove redondant innerModule prop
* Improve UX
* Add expand/collapse
* Add filter to hide result and inputs
* Steps are now flow children
* improve UX
* Open flow and steps sction when executing
* Handle empty subflows
* remove unnecessary sequence viewer component
* nit
* use iteration picker in log view
* Replace dot with step type icon
* indicate subflows
* add step number and progression
* Incorporate inputs and results in the list of steps
* Add error indicator when subflow has error
* improve topbar
* improve log polling
* Improve log polling
* Add root flow log fetching and polling
* Add debounce for loading subflow jobs
* write a function to build the tree view from the graph
* remove unnecessary log polling
* fix flow result display
* flag errors
* preprocessor
* remove all flow logs drawer
* grenerate graph from component
* wip
* Check module change before building graph
* nit
* fix log overflow
* fix log viewer borders
* mini jobs run preview fix
* elegent job logs loading
* nit
* nit
* nit
* all
* all
* all
* all
---------
Co-authored-by: Ruben Fiszel <ruben@windmill.dev>