Skip to main content

PlanSession

Struct PlanSession 

Source
pub struct PlanSession { /* private fields */ }
Expand description

An interactive planning session wrapping a ClaudeClient with the Planner profile for multi-turn feature planning conversations.

§Usage

  1. Create via PlanSession::new
  2. Call send repeatedly for conversation turns
  3. Call approve to formalize the approved design
  4. Call finalize to write specs and create a worktree

Implementations§

Source§

impl PlanSession

Source

pub fn new( feature_slug: String, project_root: PathBuf, pm: &PromptManager, config: &CodaConfig, git: Arc<dyn GitOps>, ) -> Result<Self, CoreError>

Creates a new planning session for the given feature.

Initializes a ClaudeClient with the Planner profile and renders the planning system prompt with repository context.

§Errors

Returns CoreError if the system prompt cannot be rendered.

Source

pub async fn connect(&mut self) -> Result<(), CoreError>

Connects the underlying ClaudeClient to the Claude process.

§Errors

Returns CoreError::AgentError if the connection fails.

Source

pub async fn disconnect(&mut self)

Disconnects the underlying ClaudeClient.

Safe to call multiple times or when not connected.

Source

pub async fn send(&mut self, message: &str) -> Result<String, CoreError>

Sends a user message and collects the agent’s response.

Automatically connects on the first call.

§Errors

Returns CoreError::AgentError if the query or response streaming fails.

Source

pub async fn approve(&mut self) -> Result<(String, String), CoreError>

Formalizes the approved design and generates a verification plan.

First asks the agent to produce a structured design specification document, then generates a verification plan based on the design. Both are stored so finalize can write them directly without re-generating.

Returns (design, verification) so the UI can display both.

§Errors

Returns CoreError if template rendering or agent communication fails.

Source

pub fn is_approved(&self) -> bool

Returns true if both design and verification have been approved via approve.

Source

pub async fn finalize(&mut self) -> Result<PlanOutput, CoreError>

Finalizes the planning session by creating a worktree and writing specs.

This method:

  1. Creates a git worktree from the base branch
  2. Writes the approved design spec into the worktree
  3. Writes the approved verification plan into the worktree
  4. Writes the initial state.yml into the worktree

All feature artifacts are written under <worktree>/.coda/<slug>/ so they travel with the feature branch and merge cleanly into main.

§Errors

Returns CoreError if git operations, directory creation, or file writes fail.

Source

pub fn feature_dir_name(&self) -> &str

Returns the directory name for this feature (the slug itself).

Source

pub fn feature_slug(&self) -> &str

Returns the feature slug.

Trait Implementations§

Source§

impl Debug for PlanSession

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more