Module subprocess

Module subprocess 

Source
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:

§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 logic

Re-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§

SubprocessManager
Central manager for subprocess operations across MMM