* 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>
* 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>
* 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
* 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>
* fix flow result overflow
* fix resource type misalignment and icon sizes
* Do not display resource type description if empty
* Display flow yaml editor full height
* fix detail page overflow
* nit