pub struct SessionWorkspace {Show 14 fields
pub id: WorkspaceId,
pub session_id: SessionId,
pub repo_id: RepoId,
pub agent_id: AgentId,
pub agent_name: String,
pub changeset_id: Uuid,
pub intent: String,
pub base_commit: String,
pub overlay: FileOverlay,
pub graph: SessionGraph,
pub mode: WorkspaceMode,
pub state: WorkspaceState,
pub created_at: Instant,
pub last_active: Instant,
}Expand description
An isolated workspace for a single agent session.
Reads resolve overlay-first, then fall through to the Git tree at
base_commit. Writes go exclusively to the overlay.
Fields§
§id: WorkspaceId§session_id: SessionId§repo_id: RepoId§agent_id: AgentId§agent_name: String§changeset_id: Uuid§intent: String§base_commit: String§overlay: FileOverlay§graph: SessionGraph§mode: WorkspaceMode§state: WorkspaceState§created_at: Instant§last_active: InstantImplementations§
Source§impl SessionWorkspace
impl SessionWorkspace
Sourcepub async fn new(
session_id: SessionId,
repo_id: RepoId,
agent_id: AgentId,
changeset_id: Uuid,
intent: String,
base_commit: String,
mode: WorkspaceMode,
agent_name: String,
db: PgPool,
) -> Result<Self>
pub async fn new( session_id: SessionId, repo_id: RepoId, agent_id: AgentId, changeset_id: Uuid, intent: String, base_commit: String, mode: WorkspaceMode, agent_name: String, db: PgPool, ) -> Result<Self>
Create a new workspace and persist metadata to the database.
Sourcepub fn read_file(
&self,
path: &str,
git_repo: &GitRepository,
) -> Result<FileReadResult>
pub fn read_file( &self, path: &str, git_repo: &GitRepository, ) -> Result<FileReadResult>
Read a file through the overlay-first layer.
- If the overlay has a
ModifiedorAddedentry, return that content. - If the overlay has a
Deletedentry, return a “not found” error. - Otherwise, read from the Git tree at
base_commit.
Sourcepub async fn write_file(
&self,
path: &str,
content: Vec<u8>,
git_repo: &GitRepository,
) -> Result<String>
pub async fn write_file( &self, path: &str, content: Vec<u8>, git_repo: &GitRepository, ) -> Result<String>
Write a file through the overlay.
Determines whether the file is new (not in base tree) or modified.
Sourcepub async fn delete_file(&self, path: &str) -> Result<()>
pub async fn delete_file(&self, path: &str) -> Result<()>
Delete a file in the overlay.
Sourcepub fn list_files(
&self,
git_repo: &GitRepository,
only_modified: bool,
prefix: Option<&str>,
) -> Result<Vec<String>>
pub fn list_files( &self, git_repo: &GitRepository, only_modified: bool, prefix: Option<&str>, ) -> Result<Vec<String>>
List files visible in this workspace.
If only_modified is true, return only overlay entries.
Otherwise, return the full base tree merged with overlay changes.
When prefix is Some, only paths starting with the given prefix
are included. The filter is applied early in the pipeline so that
building the HashSet only contains relevant entries rather than
the entire tree (which can be 100k+ files in large repos).
Auto Trait Implementations§
impl Freeze for SessionWorkspace
impl !RefUnwindSafe for SessionWorkspace
impl Send for SessionWorkspace
impl Sync for SessionWorkspace
impl Unpin for SessionWorkspace
impl UnsafeUnpin for SessionWorkspace
impl !UnwindSafe for SessionWorkspace
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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