pub struct PhaseContext<'a> {Show 17 fields
pub config: &'a Config,
pub registry: &'a AgentRegistry,
pub logger: &'a Logger,
pub colors: &'a Colors,
pub timer: &'a mut Timer,
pub stats: &'a mut Stats,
pub developer_agent: &'a str,
pub reviewer_agent: &'a str,
pub review_guidelines: Option<&'a ReviewGuidelines>,
pub template_context: &'a TemplateContext,
pub run_context: RunContext,
pub execution_history: ExecutionHistory,
pub prompt_history: HashMap<String, String>,
pub executor: &'a dyn ProcessExecutor,
pub executor_arc: Arc<dyn ProcessExecutor>,
pub repo_root: &'a Path,
pub workspace: &'a dyn Workspace,
}Expand description
Shared context for all pipeline phases.
This struct holds references to all the shared state that phases need to access. It is passed by mutable reference to each phase function.
Fields§
§config: &'a ConfigConfiguration settings for the pipeline.
registry: &'a AgentRegistryAgent registry for looking up agent configurations.
logger: &'a LoggerLogger for output and diagnostics.
colors: &'a ColorsTerminal color configuration.
timer: &'a mut TimerTimer for tracking elapsed time.
stats: &'a mut StatsStatistics for tracking pipeline progress.
developer_agent: &'a strName of the developer agent.
reviewer_agent: &'a strName of the reviewer agent.
review_guidelines: Option<&'a ReviewGuidelines>Review guidelines based on detected project stack.
template_context: &'a TemplateContextTemplate context for loading user templates.
run_context: RunContextRun context for tracking execution lineage and state.
execution_history: ExecutionHistoryExecution history for tracking pipeline steps.
prompt_history: HashMap<String, String>Prompt history for storing prompts used during execution.
executor: &'a dyn ProcessExecutorProcess executor for external process execution.
executor_arc: Arc<dyn ProcessExecutor>Arc-wrapped executor for spawning into threads (e.g., idle timeout monitor).
repo_root: &'a PathRepository root path for explicit file operations.
This eliminates CWD dependencies by providing an explicit path for all
file operations. Code should use repo_root.join("relative/path") instead
of Path::new("relative/path").
workspace: &'a dyn WorkspaceWorkspace for explicit path resolution and file operations.
Provides convenient methods for file operations and path resolution without depending on the current working directory.
This uses trait object (&dyn Workspace) for proper dependency injection:
- Production code passes
&WorkspaceFs(real filesystem) - Tests can pass
&MemoryWorkspace(in-memory storage)
Implementations§
Source§impl PhaseContext<'_>
impl PhaseContext<'_>
Sourcepub fn record_developer_iteration(&mut self)
pub fn record_developer_iteration(&mut self)
Record a completed developer iteration.
Sourcepub fn record_reviewer_pass(&mut self)
pub fn record_reviewer_pass(&mut self)
Record a completed reviewer pass.
Sourcepub fn capture_prompt(&mut self, key: &str, prompt: &str)
pub fn capture_prompt(&mut self, key: &str, prompt: &str)
Capture a prompt in the prompt history.
This method stores a prompt with a key for later retrieval on resume. The key should uniquely identify the prompt (e.g., “development_1”, “review_2”).
§Arguments
key- Unique identifier for this promptprompt- The prompt text to store
Sourcepub fn clone_prompt_history(&self) -> HashMap<String, String>
pub fn clone_prompt_history(&self) -> HashMap<String, String>
Clone the prompt history without consuming it.
This is used when building checkpoints to include the prompts while keeping them in the context for subsequent checkpoint saves.
Auto Trait Implementations§
impl<'a> Freeze for PhaseContext<'a>
impl<'a> !RefUnwindSafe for PhaseContext<'a>
impl<'a> Send for PhaseContext<'a>
impl<'a> Sync for PhaseContext<'a>
impl<'a> Unpin for PhaseContext<'a>
impl<'a> !UnwindSafe for PhaseContext<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more