pub trait Workspace:
Send
+ Sync
+ Debug {
Show 42 methods
// Required methods
fn description(&self) -> String;
fn root(&self) -> PathBuf;
fn read_file<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn write_file<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn create_dir_all<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn remove_file<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn exists<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn is_dir<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_dir<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<DirEntry>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn walk_tree<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_depth: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn find_files<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn grep<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
include: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<Vec<GrepMatch>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait;
fn exec<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
cwd: Option<&'life2 str>,
) -> Pin<Box<dyn Future<Output = Result<CmdOutput>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
// Provided methods
fn capabilities(&self) -> WorkspaceCapabilities { ... }
fn resolved_backend_id(&self) -> Option<ResolvedBackendId> { ... }
fn supports_change_sets(&self) -> bool { ... }
fn apply_change_set<'life0, 'async_trait>(
&'life0 self,
_request: WorkspaceChangeSetRequest,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceChangeSet>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn get_change_set<'life0, 'life1, 'async_trait>(
&'life0 self,
_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceChangeSet>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn revert_change_set<'life0, 'life1, 'async_trait>(
&'life0 self,
_id: &'life1 str,
_conversation_id: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceChangeSet>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn read_file_tail<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_bytes: usize,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn read_file_bytes<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn write_file_bytes<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 [u8],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn file_revision<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn read_file_versioned<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<VersionedFile>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn write_file_if_match<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 [u8],
if_match: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait { ... }
fn write_file_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
_path: &'life1 str,
_offset: u64,
_content: Bytes,
_final_chunk: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn remove_file_if_match<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
if_match: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn file_size<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<u64>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn list_dir_with_options<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<DirEntry>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn walk_tree_with_options<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_depth: usize,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn find_files_with_options<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn grep_with_options<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
include: Option<&'life3 str>,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<GrepMatch>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait { ... }
fn resource_usage<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceResourceUsage>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn exec_detached<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
cwd: Option<&'life2 str>,
_timeout_secs: u64,
) -> Pin<Box<dyn Future<Output = Result<CmdOutput>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait { ... }
fn port_url<'life0, 'async_trait>(
&'life0 self,
port: u16,
) -> Pin<Box<dyn Future<Output = Result<PortUrl>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn port_url_with_ttl<'life0, 'async_trait>(
&'life0 self,
port: u16,
_ttl_seconds: u64,
) -> Pin<Box<dyn Future<Output = Result<PortUrl>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn start_static_preview<'life0, 'life1, 'async_trait>(
&'life0 self,
directory: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<StaticPreviewServer>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn static_preview_ready<'life0, 'life1, 'async_trait>(
&'life0 self,
server: &'life1 StaticPreviewServer,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn stop_static_preview<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn keep_alive<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
fn cleanup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
}Expand description
The core workspace trait. All filesystem and command execution flows through this.
Required Methods§
fn description(&self) -> String
fn root(&self) -> PathBuf
fn read_file<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_file<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Sourcefn create_dir_all<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_dir_all<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Security-sensitive file operations have no shell-based compatibility fallback. Every adapter must implement them with its native file API.
fn remove_file<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn exists<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_dir<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_dir<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<DirEntry>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn walk_tree<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_depth: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn find_files<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn grep<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
include: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<Vec<GrepMatch>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn exec<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
cwd: Option<&'life2 str>,
) -> Pin<Box<dyn Future<Output = Result<CmdOutput>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Provided Methods§
Sourcefn capabilities(&self) -> WorkspaceCapabilities
fn capabilities(&self) -> WorkspaceCapabilities
Describe the data-plane features exposed by this workspace handle.
The conservative default keeps custom adapters source-compatible; adapters should override it when they provide stronger guarantees or command/preview support.
fn resolved_backend_id(&self) -> Option<ResolvedBackendId>
Sourcefn supports_change_sets(&self) -> bool
fn supports_change_sets(&self) -> bool
Whether this handle is backed by Infra’s durable, atomic ChangeSet API.
fn apply_change_set<'life0, 'async_trait>(
&'life0 self,
_request: WorkspaceChangeSetRequest,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceChangeSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_change_set<'life0, 'life1, 'async_trait>(
&'life0 self,
_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceChangeSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn revert_change_set<'life0, 'life1, 'async_trait>(
&'life0 self,
_id: &'life1 str,
_conversation_id: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceChangeSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Sourcefn read_file_tail<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_bytes: usize,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_file_tail<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_bytes: usize,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Read at most the final max_bytes of a UTF-8 text file.
Providers should override this to avoid transferring or buffering the entire file. The compatibility default preserves behavior for custom Workspace implementations while keeping callers on one capability.
fn read_file_bytes<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_file_bytes<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 [u8],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Sourcefn file_revision<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn file_revision<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Return a content revision suitable for optimistic concurrency checks.
fn read_file_versioned<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<VersionedFile>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Sourcefn write_file_if_match<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 [u8],
if_match: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn write_file_if_match<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
path: &'life1 str,
content: &'life2 [u8],
if_match: Option<&'life3 str>,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Compatibility CAS facade. Adapters should override this so compare and write share their strongest available atomicity boundary.
Sourcefn write_file_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
_path: &'life1 str,
_offset: u64,
_content: Bytes,
_final_chunk: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_file_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
_path: &'life1 str,
_offset: u64,
_content: Bytes,
_final_chunk: bool,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Write one resumable upload chunk at an exact byte offset.
Sourcefn remove_file_if_match<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
if_match: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn remove_file_if_match<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
path: &'life1 str,
if_match: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Remove a file only when its content revision still matches. Adapters should override this so the check and unlink share one atomic boundary.
fn file_size<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<u64>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_dir_with_options<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<DirEntry>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn walk_tree_with_options<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
max_depth: usize,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn find_files_with_options<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn grep_with_options<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
pattern: &'life1 str,
path: &'life2 str,
include: Option<&'life3 str>,
_options: FileVisibilityOptions,
) -> Pin<Box<dyn Future<Output = Result<Vec<GrepMatch>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Sourcefn resource_usage<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceResourceUsage>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn resource_usage<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkspaceResourceUsage>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Collect resource pressure from inside the workspace boundary.
Filesystem and inode values come from the workspace mount itself. Provider quota remains absent until a provider exposes a trustworthy quota API; callers must not substitute host filesystem values.
Sourcefn exec_detached<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
cwd: Option<&'life2 str>,
_timeout_secs: u64,
) -> Pin<Box<dyn Future<Output = Result<CmdOutput>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn exec_detached<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
cwd: Option<&'life2 str>,
_timeout_secs: u64,
) -> Pin<Box<dyn Future<Output = Result<CmdOutput>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Start a command whose lifetime is independent from the request that launched it. Remote backends should override this when their synchronous exec transport owns or reaps descendant processes after returning.
fn port_url<'life0, 'async_trait>(
&'life0 self,
port: u16,
) -> Pin<Box<dyn Future<Output = Result<PortUrl>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sourcefn port_url_with_ttl<'life0, 'async_trait>(
&'life0 self,
port: u16,
_ttl_seconds: u64,
) -> Pin<Box<dyn Future<Output = Result<PortUrl>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn port_url_with_ttl<'life0, 'async_trait>(
&'life0 self,
port: u16,
_ttl_seconds: u64,
) -> Pin<Box<dyn Future<Output = Result<PortUrl>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Resolve a preview URL whose provider-side token remains valid for the requested lifetime. Backends without signed URLs can ignore the TTL.
Sourcefn start_static_preview<'life0, 'life1, 'async_trait>(
&'life0 self,
directory: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<StaticPreviewServer>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start_static_preview<'life0, 'life1, 'async_trait>(
&'life0 self,
directory: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<StaticPreviewServer>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Start a managed, loopback-only static server rooted at directory.
The generated server rejects directory listings, dotfile access, and Provider adapters must implement preview lifecycle natively; the provider-neutral contract never spawns a host-side helper process.
Sourcefn static_preview_ready<'life0, 'life1, 'async_trait>(
&'life0 self,
server: &'life1 StaticPreviewServer,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn static_preview_ready<'life0, 'life1, 'async_trait>(
&'life0 self,
server: &'life1 StaticPreviewServer,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Check whether a previously started static Preview still owns its process and the port it published. Remote backends may override this when process identity is managed by the provider.
fn stop_static_preview<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn keep_alive<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn init<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cleanup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".