[package] name = "agent_runner" version.workspace = true edition.workspace = true authors.workspace = true license.workspace = true [lib] name = "agent_runner" path = "src/lib.rs" [features] default = ["http-server", "grpc-server"] # HTTP 服务器功能:启用 HTTP REST API 和 SSE 进度流 # 注意:启用 http-server 时会同时启动 gRPC(除非明确禁用) http-server = [] # gRPC 服务功能:启用 gRPC 服务 # 在 http-server 模式下: # - 启用 grpc-server:同时运行 HTTP + gRPC # - 禁用 grpc-server:仅运行 HTTP(无 gRPC) grpc-server = [] # Pingora 代理模式:API Key 和 Base URL 使用占位符,由 Pingora 代理注入真实值 # Windows 不支持 Pingora,禁用此 feature 时直接使用真实的 API Key 和 Base URL proxy = ["agent_abstraction/proxy", "dep:rcoder-proxy"] # 测试相关 features testing = ["test-blocking"] test-blocking = [] # 启用测试用阻塞注入 (用于极端场景测试) # OpenTelemetry 追踪 feature otel = [] # 启用 OpenTelemetry 追踪功能 # Pyroscope 连续性能分析 pyroscope = ["dep:pyroscope", "dep:pyroscope_pprofrs"] [dependencies] # Internal crates shared_types = { path = "../shared_types" } agent_config = { path = "../agent_config" } agent_abstraction = { path = "../agent_abstraction" } rcoder-proxy = { path = "../rcoder-proxy", optional = true } rcoder-telemetry = { workspace = true } clap = { workspace = true } # ACP Protocol - 官方 SDK(完全 Send-safe,无需 LocalSet) agent-client-protocol = { workspace = true } async-trait = "0.1" parking_lot = "0.12" tempfile = { workspace = true } # HTTP server axum = { workspace = true, features = ["multipart"] } tower = { workspace = true } tower-http = { workspace = true, features = ["cors", "trace", "limit"] } futures = { workspace = true } tokio-stream = "0.1" async-stream = "0.3" # gRPC Server tonic = { workspace = true } # Serialization serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } serde_yaml = "0.9" derive_builder = { workspace = true } # Workspace dependencies tokio = { workspace = true, features = ["full"] } tokio-util = { workspace = true } anyhow = { workspace = true } thiserror = { workspace = true } tracing = { workspace = true } tracing-subscriber = { workspace = true, features = [ "fmt", "env-filter", "json", ] } tracing-appender = "0.2" uuid = { workspace = true, features = ["v4", "serde"] } chrono = { workspace = true, features = ["serde"] } dashmap = { workspace = true } bytes = "1.0" futures-util = { workspace = true } piper = "0.2" base64 = { workspace = true } reqwest = { workspace = true } rustls = { workspace = true } # OpenTelemetry opentelemetry = { workspace = true } opentelemetry_sdk = { workspace = true } tracing-opentelemetry = { workspace = true } axum-tracing-opentelemetry = { workspace = true } # File system tokio-fs = { workspace = true } path-clean = { workspace = true } # OpenAPI documentation utoipa = { workspace = true } utoipa-swagger-ui = { workspace = true } # Validation garde = { version = "0.22.1", features = ["derive"] } ringbuf = { workspace = true } # Atomic swap for sender replacement arc-swap = "1.8" # Pyroscope Continuous Profiling pyroscope = { workspace = true, optional = true } pyroscope_pprofrs = { workspace = true, optional = true } # Unix 信号处理(用于僵尸进程回收,仅 Unix 平台) [target.'cfg(unix)'.dependencies] nix = { workspace = true, features = ["signal", "process"] }