* 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>
153 lines
5.8 KiB
TOML
153 lines
5.8 KiB
TOML
[package]
|
|
name = "windmill-worker"
|
|
version.workspace = true
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
|
|
[lib]
|
|
name = "windmill_worker"
|
|
path = "src/lib.rs"
|
|
|
|
[features]
|
|
default = []
|
|
private = []
|
|
prometheus = ["dep:prometheus", "windmill-common/prometheus"]
|
|
enterprise = ["windmill-queue/enterprise", "windmill-git-sync/enterprise", "windmill-common/enterprise", "dep:pem", "dep:tokio-util"]
|
|
mssql = ["dep:tiberius"]
|
|
bigquery = ["dep:gcp_auth"]
|
|
benchmark = ["windmill-queue/benchmark", "windmill-common/benchmark"]
|
|
parquet = ["windmill-common/parquet", "dep:object_store"]
|
|
flow_testing = []
|
|
cloud = []
|
|
sqlx = []
|
|
deno_core = ["dep:deno_fetch", "dep:deno_webidl", "dep:deno_web", "dep:deno_net", "dep:deno_console", "dep:deno_url", "dep:deno_core",
|
|
"dep:deno_ast", "dep:deno_tls", "dep:deno_permissions", "dep:deno_io", "dep:deno_runtime", "dep:deno_telemetry", "dep:deno_error", "dep:winapi"]
|
|
libffi_mac = ["dep:libffi-sys"]
|
|
otel = ["windmill-common/otel", "dep:opentelemetry"]
|
|
dind = ["dep:bollard"]
|
|
php = ["dep:windmill-parser-php"]
|
|
mysql = ["dep:mysql_async"]
|
|
oracledb = ["dep:oracle"]
|
|
python = ["dep:windmill-parser-py", "dep:windmill-parser-py-imports"]
|
|
csharp = ["dep:windmill-parser-csharp"]
|
|
rust = ["dep:windmill-parser-rust"]
|
|
nu = ["dep:windmill-parser-nu"]
|
|
java = ["dep:windmill-parser-java"]
|
|
ruby = ["dep:windmill-parser-ruby"]
|
|
duckdb = ["dep:libloading"]
|
|
|
|
[dependencies]
|
|
windmill-queue.workspace = true
|
|
windmill-audit.workspace = true # there isn't really a reason for audit-worth actions to happen in the worker.
|
|
windmill-common = { workspace = true, default-features = false }
|
|
windmill-macros.workspace = true
|
|
windmill-parser.workspace = true
|
|
windmill-parser-ts.workspace = true
|
|
windmill-parser-go.workspace = true
|
|
windmill-parser-rust = { workspace = true, optional = true }
|
|
windmill-parser-csharp = { workspace = true, optional = true }
|
|
windmill-parser-nu = { workspace = true, optional = true }
|
|
windmill-parser-java = { workspace = true, optional = true }
|
|
windmill-parser-ruby = { workspace = true, optional = true }
|
|
windmill-parser-py = { workspace = true, optional = true }
|
|
windmill-parser-yaml.workspace = true
|
|
windmill-parser-py-imports = { workspace = true, optional = true }
|
|
windmill-parser-bash.workspace = true
|
|
windmill-parser-sql.workspace = true
|
|
windmill-parser-graphql.workspace = true
|
|
windmill-parser-php = { workspace = true, optional = true }
|
|
windmill-git-sync.workspace = true
|
|
rmcp = { version = "0.8.1", features = ["client", "transport-streamable-http-client", "transport-streamable-http-client-reqwest"] }
|
|
flume.workspace = true
|
|
sqlx.workspace = true
|
|
uuid.workspace = true
|
|
ulid.workspace = true
|
|
tracing.workspace = true
|
|
tokio.workspace = true
|
|
tokio-stream.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
futures.workspace = true
|
|
async-recursion.workspace = true
|
|
async-trait.workspace = true
|
|
anyhow.workspace = true
|
|
itertools.workspace = true
|
|
regex.workspace = true
|
|
prometheus = { workspace = true, optional = true }
|
|
lazy_static.workspace = true
|
|
chrono.workspace = true
|
|
dotenv.workspace = true
|
|
rand.workspace = true # TODO: Remove. only used by token creation hack.
|
|
const_format.workspace = true
|
|
mappable-rc.workspace = true
|
|
git-version.workspace = true
|
|
dyn-iter.workspace = true
|
|
once_cell.workspace = true
|
|
tokio-postgres.workspace = true
|
|
bit-vec.workspace = true
|
|
url.workspace = true
|
|
deno_telemetry = { workspace = true, optional = true }
|
|
deno_fetch = { workspace = true, optional = true }
|
|
deno_webidl = { workspace = true, optional = true }
|
|
deno_web = { workspace = true, optional = true }
|
|
deno_net = { workspace = true, optional = true }
|
|
deno_console = { workspace = true, optional = true }
|
|
deno_url = { workspace = true, optional = true }
|
|
deno_core = { workspace = true, optional = true }
|
|
deno_ast = { workspace = true, optional = true }
|
|
deno_tls = { workspace = true, optional = true }
|
|
deno_permissions = { workspace = true, optional = true }
|
|
deno_io = { workspace = true, optional = true }
|
|
deno_error = { workspace = true, optional = true }
|
|
async-stream.workspace = true
|
|
|
|
postgres-native-tls.workspace = true
|
|
native-tls.workspace = true
|
|
mysql_async = { workspace = true, optional = true }
|
|
base64.workspace = true
|
|
gcp_auth = { workspace = true, optional = true }
|
|
rust_decimal.workspace = true
|
|
jsonwebtoken.workspace = true
|
|
sha2.workspace = true
|
|
pem = { workspace = true, optional = true }
|
|
urlencoding.workspace = true
|
|
nix.workspace = true
|
|
bytes.workspace = true
|
|
reqwest.workspace = true
|
|
reqwest-middleware.workspace = true
|
|
mime_guess.workspace = true
|
|
hex.workspace = true
|
|
tiberius = { workspace = true, optional = true }
|
|
tokio-util = { workspace = true, optional = true }
|
|
tar.workspace = true
|
|
object_store = { workspace = true, optional = true}
|
|
convert_case.workspace = true
|
|
yaml-rust.workspace = true
|
|
backon.workspace = true
|
|
winapi = { workspace = true, optional = true }
|
|
pep440_rs.workspace = true
|
|
process-wrap.workspace = true
|
|
async-once-cell.workspace = true
|
|
libloading = { workspace = true, optional = true }
|
|
|
|
opentelemetry = { workspace = true, optional = true }
|
|
bollard = { workspace = true, optional = true }
|
|
oracle = { workspace = true, optional = true }
|
|
|
|
[build-dependencies]
|
|
deno_fetch = { workspace = true, optional = true }
|
|
deno_webidl = { workspace = true, optional = true }
|
|
deno_web = { workspace = true, optional = true }
|
|
deno_net = { workspace = true, optional = true }
|
|
deno_console = { workspace = true, optional = true }
|
|
deno_url = { workspace = true, optional = true }
|
|
deno_core = { workspace = true, optional = true }
|
|
deno_ast = { workspace = true, optional = true }
|
|
deno_tls = { workspace = true, optional = true }
|
|
deno_permissions = { workspace = true, optional = true }
|
|
deno_io = { workspace = true, optional = true }
|
|
deno_runtime = { workspace = true, optional = true }
|
|
deno_telemetry = { workspace = true, optional = true }
|
|
winapi = { workspace = true, optional = true }
|
|
libffi-sys = { workspace = true, optional = true }
|