qwencode-rs
Rust SDK for programmatic access to QwenCode CLI.
Overview
This SDK provides a Rust interface for interacting with the QwenCode CLI, enabling programmatic query execution, session management, and MCP (Model Context Protocol) server integration.
Features
- Async/Await API: Built on Tokio for non-blocking operations
- Type-safe: Strong typing for all message types and configurations
- Session Management: Full control over query sessions
- MCP Support: Create and manage MCP servers with custom tools
- Streaming: Real-time message streaming with async channels
- Builder Pattern: Fluent API for easy configuration
Installation
Add this to your Cargo.toml:
[]
= "0.1.0"
= { = "1", = ["full"] }
Quick Start
use ;
async
Usage Examples
Query with Custom Options
use ;
let options = QueryOptions ;
let result = query.await?;
Using the Query Builder
use query_builder;
let result = query_builder
.prompt
.model
.cwd
.permission_mode
.max_turns
.debug
.execute
.await?;
Creating MCP Tools
use ;
use Deserialize;
use JsonSchema;
let add_tool = tool!;
let server = create_sdk_mcp_server;
Session Management
use ;
let options = QueryOptions ;
let result = query.await?;
// Get session ID
println!;
// Interrupt the query
result.handle.interrupt.await?;
// Close the session
result.close.await?;
Custom Permission Handler
use ;
async
let options = QueryOptions ;
API Reference
Core Functions
query(prompt, options)- Execute a query against QwenCode CLIquery_builder()- Create a query using the fluent builder APItool!(name, description, Args, handler)- Macro to create MCP toolscreate_sdk_mcp_server(name, tools)- Create an MCP server
Message Types
SDKMessage- Enum of all message typesSDKUserMessage- User messagesSDKAssistantMessage- Assistant responsesSDKSystemMessage- System messagesSDKResultMessage- Query resultsSDKPartialAssistantMessage- Streaming partial messages
Configuration
QueryOptions- Main configuration structPermissionMode- Permission modes (Default, Plan, AutoEdit, Yolo)TimeoutConfig- Timeout settingsAuthType- Authentication types (OpenAI, Qwen OAuth)
Error Handling
SDKError- Main error enumAbortError- Cancellation erroris_abort_error(err)- Check if error is abort-related
Architecture
src/
├── lib.rs # Public API exports
├── types/ # Type definitions
│ ├── message.rs # SDK message types
│ ├── config.rs # Configuration types
│ ├── error.rs # Error types
│ ├── permission.rs # Permission handling
│ └── mcp.rs # MCP types
├── transport/ # Communication layer
│ ├── protocol.rs # JSON-RPC protocol
│ ├── stream.rs # Message streaming
│ └── stdin.rs # Process management
├── query/ # Query logic
│ ├── session.rs # Session management
│ ├── builder.rs # Query builder
│ └── handler.rs # Query execution
├── mcp/ # MCP support
│ ├── tool.rs # Tool definitions
│ ├── server.rs # MCP server
│ └── client.rs # MCP client
└── utils/ # Utilities
├── validation.rs # Validation helpers
└── helpers.rs # Utility functions
Permission Modes
| Mode | Description |
|---|---|
Default |
Read tools auto-execute, write tools require approval |
Plan |
Only generate a plan, no tool execution |
AutoEdit |
Auto-approve edit and write_file tools |
Yolo |
Auto-approve all tools |
Timeout Configuration
use TimeoutConfigBuilder;
let timeouts = default
.can_use_tool // 60 seconds
.mcp_request // 60 seconds
.control_request // 60 seconds
.stream_close // 15 seconds
.build
.unwrap;
Development
Running Tests
# Run all tests
# Run tests with output
# Run specific module tests
# Run with coverage (requires tarpaulin)
Code Quality
# Run clippy
# Format code
# Check formatting
# Build documentation
Building
# Debug build
# Release build
# Check compilation
Best Practices
- TDD First: Write tests before implementation
- Clippy Clean: Zero warnings allowed (
-D warnings) - Format on Save: Run
cargo fmtbefore commits - Semantic Versioning: Follow semver for releases
- Conventional Commits: Use commit message format
CI/CD Pipeline
The project uses GitHub Actions for continuous integration:
On Every Push/PR
- ✅ Format check
- ✅ Clippy linting
- ✅ Build & Test (Linux, macOS, Windows)
- ✅ MSRV check (Rust 1.86)
- ✅ Documentation build
- ✅ Security audit
Release Process
- Update version in
Cargo.toml - Create and push tag:
git tag v0.1.1 && git push origin v0.1.1 - CI validates and publishes to crates.io
- GitHub Release is created automatically
For details, see .github/workflows/
Roadmap
- Full CLI process integration (one-shot mode)
- Examples directory (basic_query, mcp_server)
- Integration tests with mock CLI
- WebSocket transport support
- Advanced MCP server features
- Performance benchmarks
- Publish to crates.io
License
Apache-2.0
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Support
- Issues: https://github.com/Ismaellima4/qwencode-rs/issues
- Documentation: https://docs.rs/qwencode-rs