Skip to main content

devboy_executor/
lib.rs

1//! # devboy-executor
2//!
3//! Tool execution engine for devboy-tools.
4//!
5//! Separates tool execution logic from transport (MCP stdio, HTTP, NAPI).
6//! Provides:
7//! - `Executor` — dispatches tool calls to providers with enrichment pipeline
8//! - `AdditionalContext` / `ProviderConfig` — typed runtime context
9//! - `ToolOutput` — typed results from tool execution
10//! - `ToolEnricher` — plugin trait for dynamic schema modification
11//! - `factory` — creates providers from `ProviderConfig`
12//!
13//! ## Usage
14//!
15//! ```rust,no_run
16//! use devboy_executor::{Executor, AdditionalContext, ProviderConfig, GitLabScope};
17//! use devboy_executor::enricher::FormatPipelineEnricher;
18//! use std::collections::HashMap;
19//!
20//! # async fn example() -> devboy_core::Result<()> {
21//! let mut executor = Executor::new();
22//! executor.add_enricher(Box::new(FormatPipelineEnricher));
23//!
24//! let ctx = AdditionalContext {
25//!     provider: ProviderConfig::GitLab {
26//!         base_url: "https://gitlab.com".into(),
27//!         access_token: "glpat-xxx".into(),
28//!         scope: GitLabScope::Project { id: "12345".into() },
29//!         extra: HashMap::new(),
30//!     },
31//!     proxy: None,
32//!     metadata: None,
33//!     extra: HashMap::new(),
34//! };
35//!
36//! let args = serde_json::json!({ "state": "opened", "limit": 10 });
37//! let output = executor.execute("get_merge_requests", args, &ctx).await?;
38//! println!("Got {} items", output.item_count());
39//! # Ok(())
40//! # }
41//! ```
42
43#![deny(rustdoc::broken_intra_doc_links)]
44#![deny(rustdoc::private_intra_doc_links)]
45#![deny(rustdoc::invalid_html_tags)]
46
47pub mod argv_secrets;
48/// Typed runtime context: provider configs, scopes, additional metadata.
49pub mod context;
50pub mod enricher;
51pub mod executor;
52/// Provider factory — builds concrete `Provider` instances from `ProviderConfig`.
53pub mod factory;
54pub mod format;
55/// Typed `ToolOutput` returned from tool execution.
56pub mod output;
57pub mod tool_docs;
58pub mod tools;
59
60// Re-export main types at crate root
61pub use context::{
62    AdditionalContext, ClickUpScope, ConfluenceAuthConfig, ConfluenceScope, GitHubScope,
63    GitLabScope, JiraScope, ProviderConfig, ProviderMetadata, ProxyConfig,
64};
65pub use devboy_core::{ToolEnricher, ToolSchema, sanitize_field_name};
66pub use enricher::PipelineFormatEnricher;
67pub use executor::{Executor, SUPPORTED_TOOLS};
68pub use factory::{
69    create_enricher, create_knowledge_base_enricher, create_knowledge_base_provider,
70};
71pub use format::{FormatMetadata, FormatResult, execute_and_format, format_output};
72pub use output::{ResultMeta, ToolOutput};
73pub use tools::{McpOnlyTool, ToolDefinition};