qwencode-rs 0.1.0

Rust SDK for programmatic access to QwenCode CLI
Documentation
# Project Progress

## Completed ✅

### 1. Project Setup
- ✅ Created SPEC.md with full specifications based on TypeScript SDK
- ✅ Created ARCHITECTURE.md with module structure
- ✅ Configured Cargo.toml with all dependencies
- ✅ Updated repository metadata (URL: github.com/Ismaellima4/qwencode-rs, author: Ismaellima)
- ✅ Created module directory structure (types, transport, query, mcp, utils)
- ✅ All module stubs created and compiling

### 2. Types Module - TDD Approach
- **error.rs** - 11 tests passing
  - SDKError enum with all variants
  - AbortError struct with Default impl
  - is_abort_error helper
  
- **message.rs** - 11 tests passing
  - MessageRole enum (User, Assistant, System)
  - MessageContent struct
  - SDKUserMessage, SDKAssistantMessage, SDKSystemMessage
  - SDKResultMessage, SDKPartialAssistantMessage
  - SDKMessage enum with type guards
  - Serialization/deserialization with serde

- **config.rs** - Tests passing
  - QueryOptions with builder pattern
  - TimeoutConfig with Default impl
  - SubagentConfig with derived Default

- **permission.rs** - Tests passing
  - PermissionMode enum
  - Permission-related types

- **mcp.rs** - Tests passing
  - MCP tool definitions
  - McpToolDefinition, McpToolResult, ToolContent structs

### 3. Transport Layer
- **stream.rs** - Message stream handling
-**protocol.rs** - stdin/stdout protocol implementation
-**stdin.rs** - Process spawning utilities

### 4. Query Logic
- **session.rs** - QueryHandle for session management
-**builder.rs** - QueryBuilder for fluent API
-**handler.rs** - Main `query()` function and `query_builder()`
- ✅ QueryResult with handle, message stream, and close support

### 5. MCP Support
- **tool.rs** - MCP Tool system with macro for easy tool creation (4 tests)
-**server.rs** - MCP Server with tool registration and execution
-**client.rs** - MCP Client for server interaction (3 tests)

### 6. Utilities
- **validation.rs** - Validation utilities for model names, session IDs, paths
-**helpers.rs** - Helper utilities for path handling, duration formatting

### 7. Public API (lib.rs)
- ✅ Main module exports re-exported
-`query()` function for executing queries
-`query_builder()` for fluent API
- ✅ QueryResult, QueryHandle, QueryOptions
- ✅ SDKMessage and related message types
- ✅ McpClient, SdkMcpServer, McpTool
- ✅ Error types (SDKError, AbortError)

### 8. Code Quality
- ✅ All clippy warnings fixed (`cargo clippy --all-targets --all-features -- -D warnings`)
- ✅ 151 unit tests passing
- ✅ TDD approach followed throughout

### 9. CI/CD Pipeline
- ✅ GitHub Actions workflows
  - `rust-ci.yml`: Format, clippy, test (Linux/macOS/Windows), MSRV, docs, audit
  - `release.yml`: Validation, publish to crates.io, GitHub Release
  - `dependencies.yml`: Weekly security audit and dependency updates
- ✅ Best practices documented in README.md

### 10. CLI Process Communication
- **transport/communication.rs** - Full CLI process integration (7 tests)
  - `spawn_cli_process()` - Spawn QwenCode CLI with stdin/stdout/stderr pipes
  - `CLIProcess::initialize()` - Handshake with CLI (best effort)
  - `CLIProcess::send_query()` - Send prompts via stdin (JSON-RPC)
  - `CLIProcess::read_message()` - Read responses from stdout
  - `CLIProcess::shutdown()` - Graceful shutdown with kill fallback
  - `protocol_to_sdk_message()` - Convert ProtocolMessage → SDKMessage
  - Stderr monitoring via background task
-**query/executor.rs** - Query execution with CLI integration (3 tests)
  - `execute_query()` - Main function integrating CLI + message stream
  - `QueryResultWithCLI` - Wrapper with CancellationToken
  - Background task for continuous message reading
  - Query cancellation support

## In Progress 🚧

- ⏳ Integration tests for end-to-end flows with mock CLI
- ⏳ MCP streamable HTTP support

## Pending 📋

- 📋 Integration tests with mock CLI
- 📋 MCP streamable HTTP support
- 📋 Comprehensive README.md with API reference
- 📋 Documentation examples
- 📋 Benchmark tests

## Test Coverage
- **Total Tests**: 151 passing
- **Doc Tests**: 4 ignored (expected, using `ignore` attribute)
- **Modules Tested**: error (11), message (11), config, permission, mcp, transport, query (8), mcp tool (4), mcp client (3), utils, communication (7), executor (3)
- **TDD Approach**: Tests written first, then implementation

## Recent Changes
- **CLI Integration**: Implemented real Qwen CLI communication using one-shot mode
- **Message Streaming**: Query now streams actual CLI output line-by-line as assistant messages
- **Examples**: Added basic_query.rs and mcp_server.rs with working demonstrations
- **Error Handling**: Added idle timeout (60s) to prevent hanging processes
- **Fallback**: Graceful simulation when Qwen CLI is not installed
- Updated Cargo.toml MSRV from 1.75 to 1.86 (icu_* dependency requirement)
- Added tracing-subscriber dev dependency for example logging
- Fixed all clippy warnings (--all-targets --all-features -- -D warnings)

## Next Steps
1. Add integration tests with mock CLI
2. Implement MCP streamable HTTP support
3. Add more comprehensive examples (multi-turn, tool usage)
4. Publish to crates.io