Expand description
Unified subprocess abstraction layer for external tool integration
This module provides a clean, testable abstraction over subprocess execution, specifically designed for integrating with external tools like git and Claude CLI. It enables consistent process management, error handling, and testing across all subprocess operations in MMM.
§Architecture
The subprocess system uses a trait-based architecture with dependency injection:
ProcessRunner- Core trait for process executionSubprocessManager- High-level manager that orchestrates different runners- Specialized runners for specific tools (
GitRunner,ClaudeRunner)
§Examples
§Production Usage
use prodigy::subprocess::SubprocessManager;
// Create production subprocess manager
let subprocess = SubprocessManager::production();
let git = subprocess.git();
let claude = subprocess.claude();§Testing with Mocks
let (subprocess, mock) = SubprocessManager::mock();
// Configure expected calls
mock.expect_success("git", &["status", "--porcelain"], "");
// Use in tests
let git = subprocess.git();
// ... test logicRe-exports§
pub use adapter::RealSubprocessExecutor;pub use adapter::SubprocessError;pub use adapter::SubprocessExecutor;pub use builder::ProcessCommandBuilder;pub use claude::ClaudeRunner;pub use error::ProcessError;pub use git::GitRunner;pub use mock::MockCommandConfig;pub use mock::MockProcessRunner;pub use runner::ProcessCommand;pub use runner::ExitStatusHelper;pub use runner::ProcessOutput;pub use runner::ProcessRunner;pub use runner::ProcessStream;
Modules§
- adapter
- Adapter to make subprocess module compatible with commands module
- builder
- claude
- error
- git
- mock
- runner
- streaming
- Real-time streaming infrastructure for subprocess output
Structs§
- Subprocess
Manager - Central manager for subprocess operations across MMM