pub struct TmaiCore { /* private fields */ }Expand description
The Facade that wraps all tmai-core services.
Constructed via TmaiCoreBuilder.
Implementations§
Source§impl TmaiCore
impl TmaiCore
Sourcepub fn approve(&self, target: &str) -> Result<(), ApiError>
pub fn approve(&self, target: &str) -> Result<(), ApiError>
Approve an agent action (send approval keys based on agent type).
Returns Ok(()) if approval was sent or the agent was already not awaiting.
Sourcepub fn select_choice(&self, target: &str, choice: usize) -> Result<(), ApiError>
pub fn select_choice(&self, target: &str, choice: usize) -> Result<(), ApiError>
Select a choice for a UserQuestion prompt.
choice is 1-indexed (1 = first option, N+1 = “Other”).
Sourcepub fn submit_selection(
&self,
target: &str,
selected_choices: &[usize],
) -> Result<(), ApiError>
pub fn submit_selection( &self, target: &str, selected_choices: &[usize], ) -> Result<(), ApiError>
Submit multi-select choices (checkbox or legacy format).
selected_choices is a list of 1-indexed choice numbers.
Sourcepub async fn send_text(&self, target: &str, text: &str) -> Result<(), ApiError>
pub async fn send_text(&self, target: &str, text: &str) -> Result<(), ApiError>
Send text input to an agent followed by Enter.
Includes a 50ms delay between text and Enter to prevent paste-burst issues.
Sourcepub fn send_key(&self, target: &str, key: &str) -> Result<(), ApiError>
pub fn send_key(&self, target: &str, key: &str) -> Result<(), ApiError>
Send a special key to an agent (whitelist-validated).
Sourcepub fn set_auto_approve_override(
&self,
target: &str,
enabled: Option<bool>,
) -> Result<(), ApiError>
pub fn set_auto_approve_override( &self, target: &str, enabled: Option<bool>, ) -> Result<(), ApiError>
Toggle per-agent auto-approve override.
None→ follow global setting (default)Some(true)→ force enabled for this agentSome(false)→ force disabled for this agent
Sourcepub fn focus_pane(&self, target: &str) -> Result<(), ApiError>
pub fn focus_pane(&self, target: &str) -> Result<(), ApiError>
Focus on a specific pane in tmux
Sourcepub fn request_review(&self, target: &str) -> Result<(), ApiError>
pub fn request_review(&self, target: &str) -> Result<(), ApiError>
Request a fresh-session code review for a specific agent.
Directly launches a review session in a new tmux window (blocking I/O
is offloaded to spawn_blocking). Works regardless of review.enabled.
Sourcepub fn list_worktrees(&self) -> Vec<WorktreeSnapshot>
pub fn list_worktrees(&self) -> Vec<WorktreeSnapshot>
List all worktrees from state as owned snapshots
Sourcepub async fn create_worktree(
&self,
req: &WorktreeCreateRequest,
) -> Result<WorktreeCreateResult, ApiError>
pub async fn create_worktree( &self, req: &WorktreeCreateRequest, ) -> Result<WorktreeCreateResult, ApiError>
Create a new git worktree, then optionally run setup commands
Sourcepub async fn get_worktree_diff(
&self,
worktree_path: &str,
base_branch: &str,
) -> Result<(Option<String>, Option<DiffSummary>), ApiError>
pub async fn get_worktree_diff( &self, worktree_path: &str, base_branch: &str, ) -> Result<(Option<String>, Option<DiffSummary>), ApiError>
Fetch full diff for a worktree (on-demand, for diff viewer)
Sourcepub async fn delete_worktree(
&self,
req: &WorktreeDeleteRequest,
) -> Result<(), ApiError>
pub async fn delete_worktree( &self, req: &WorktreeDeleteRequest, ) -> Result<(), ApiError>
Delete a git worktree
Checks for running agents and uncommitted changes before removal.
Sourcepub fn launch_agent_in_worktree(
&self,
worktree_path: &str,
agent_type: &AgentType,
session: Option<&str>,
) -> Result<String, ApiError>
pub fn launch_agent_in_worktree( &self, worktree_path: &str, agent_type: &AgentType, session: Option<&str>, ) -> Result<String, ApiError>
Launch an agent in a worktree via tmux
Creates a new tmux window in the worktree directory and starts the agent. Returns the new pane target identifier.
Sourcepub fn get_usage(&self) -> UsageSnapshot
pub fn get_usage(&self) -> UsageSnapshot
Get the cached usage snapshot from state.
Sourcepub fn fetch_usage(&self)
pub fn fetch_usage(&self)
Start a background usage fetch.
If a fetch is already in progress, this is a no-op.
On completion, updates state and emits CoreEvent::UsageUpdated.
Sourcepub fn start_initial_usage_fetch(&self)
pub fn start_initial_usage_fetch(&self)
Auto-fetch usage on startup if enabled in settings.
Sourcepub fn kill_pane(&self, target: &str) -> Result<(), ApiError>
pub fn kill_pane(&self, target: &str) -> Result<(), ApiError>
Kill a specific agent (PTY session or tmux pane)
Sourcepub fn sync_pty_sessions(&self) -> bool
pub fn sync_pty_sessions(&self) -> bool
Sync PTY-spawned agent statuses with actual PTY session liveness and hook registry state.
- Hook status available: apply hook-derived status (highest fidelity)
- Running sessions without hooks: set to
Processing - Dead sessions: set to
Offlineand clean up from registry
Returns true if any agent status was changed.
Source§impl TmaiCore
impl TmaiCore
Sourcepub fn evaluate_pre_tool_use(
&self,
payload: &HookEventPayload,
) -> Option<PreToolUseDecision>
pub fn evaluate_pre_tool_use( &self, payload: &HookEventPayload, ) -> Option<PreToolUseDecision>
Evaluate a PreToolUse hook event for auto-approval.
Returns Some(PreToolUseDecision) if auto-approve is enabled and
the rules engine can make a decision. Returns None if auto-approve
is disabled or not applicable.
The decision maps to Claude Code’s hook response format:
Allow→ tool proceeds without permission promptDeny→ tool call is cancelledDefer→ tool paused, pending AI/human resolution (Hybrid mode)Ask→ normal permission prompt shown (fallback)
Source§impl TmaiCore
impl TmaiCore
Sourcepub fn raw_state(&self) -> &SharedState
👎Deprecated: Use TmaiCore query/action methods instead of direct state access
pub fn raw_state(&self) -> &SharedState
Use TmaiCore query/action methods instead of direct state access
Access the raw shared state.
Deprecated: prefer using typed query/action methods on TmaiCore.
This escape hatch exists for incremental migration only.
Sourcepub fn raw_command_sender(&self) -> Option<&Arc<CommandSender>>
👎Deprecated: Use TmaiCore action methods instead of direct CommandSender access
pub fn raw_command_sender(&self) -> Option<&Arc<CommandSender>>
Use TmaiCore action methods instead of direct CommandSender access
Access the raw command sender.
Deprecated: prefer using action methods on TmaiCore.
This escape hatch exists for incremental migration only.
Sourcepub fn settings(&self) -> Arc<Settings>
pub fn settings(&self) -> Arc<Settings>
Access application settings (read-only snapshot)
Returns a cheap Arc clone. The underlying settings can be
hot-reloaded via reload_settings().
Sourcepub fn reload_settings(&self) -> bool
pub fn reload_settings(&self) -> bool
Re-read config.toml and replace the live settings.
Called after PUT /api/settings/* handlers persist changes to disk.
Returns true if the reload succeeded.
Sourcepub fn ipc_server(&self) -> Option<&Arc<IpcServer>>
pub fn ipc_server(&self) -> Option<&Arc<IpcServer>>
Access the IPC server (if configured)
Sourcepub fn event_sender(&self) -> Sender<CoreEvent>
pub fn event_sender(&self) -> Sender<CoreEvent>
Get a clone of the broadcast event sender.
Used by the Poller to emit TeammateIdle/TaskCompleted events, and by the SSE handler to subscribe to events.
Sourcepub fn hook_registry(&self) -> &HookRegistry
pub fn hook_registry(&self) -> &HookRegistry
Access the hook registry for HTTP hook-based agent state
Sourcepub fn session_pane_map(&self) -> &SessionPaneMap
pub fn session_pane_map(&self) -> &SessionPaneMap
Access the session → pane ID mapping
Sourcepub fn hook_token(&self) -> Option<&str>
pub fn hook_token(&self) -> Option<&str>
Get the hook token (if configured)
Sourcepub fn pty_registry(&self) -> &Arc<PtyRegistry>
pub fn pty_registry(&self) -> &Arc<PtyRegistry>
Access the PTY session registry
Sourcepub fn runtime(&self) -> Option<&Arc<dyn RuntimeAdapter>>
pub fn runtime(&self) -> Option<&Arc<dyn RuntimeAdapter>>
Access the runtime adapter (if set)
Sourcepub fn transcript_registry(&self) -> Option<&TranscriptRegistry>
pub fn transcript_registry(&self) -> Option<&TranscriptRegistry>
Access the transcript registry (if configured)
Sourcepub fn defer_registry(&self) -> &Arc<DeferRegistry>
pub fn defer_registry(&self) -> &Arc<DeferRegistry>
Access the deferred tool call registry
Sourcepub fn validate_hook_token(&self, token: &str) -> bool
pub fn validate_hook_token(&self, token: &str) -> bool
Validate a hook authentication token (constant-time comparison)
Source§impl TmaiCore
impl TmaiCore
Sourcepub fn subscribe(&self) -> Receiver<CoreEvent>
pub fn subscribe(&self) -> Receiver<CoreEvent>
Subscribe to core events.
Returns a broadcast receiver that will receive CoreEvents.
If the receiver falls behind, older events are dropped (lagged).
Sourcepub fn notify_agents_updated(&self)
pub fn notify_agents_updated(&self)
Notify subscribers that the agent list was updated.
Called by external consumers (e.g. TUI main loop) after processing
PollMessage::AgentsUpdated. Ignored if no subscribers are listening.
Sourcepub fn notify_teams_updated(&self)
pub fn notify_teams_updated(&self)
Notify subscribers that team data was updated.
Called by external consumers after team scan completes.
Source§impl TmaiCore
impl TmaiCore
Sourcepub fn list_agents(&self) -> Vec<AgentSnapshot>
pub fn list_agents(&self) -> Vec<AgentSnapshot>
List all monitored agents as owned snapshots, in current display order.
Sourcepub fn get_agent(&self, target: &str) -> Result<AgentSnapshot, ApiError>
pub fn get_agent(&self, target: &str) -> Result<AgentSnapshot, ApiError>
Get a single agent snapshot by target ID.
Sourcepub fn selected_agent(&self) -> Result<AgentSnapshot, ApiError>
pub fn selected_agent(&self) -> Result<AgentSnapshot, ApiError>
Get the currently selected agent snapshot.
Sourcepub fn attention_count(&self) -> usize
pub fn attention_count(&self) -> usize
Get the number of agents that need user attention.
Sourcepub fn agent_count(&self) -> usize
pub fn agent_count(&self) -> usize
Get the total number of monitored agents.
Sourcepub fn agents_needing_attention(&self) -> Vec<AgentSnapshot>
pub fn agents_needing_attention(&self) -> Vec<AgentSnapshot>
List agents that need attention (awaiting approval or error).
Sourcepub fn get_preview(&self, target: &str) -> Result<String, ApiError>
pub fn get_preview(&self, target: &str) -> Result<String, ApiError>
Get the ANSI preview content for an agent.
Sourcepub fn get_content(&self, target: &str) -> Result<String, ApiError>
pub fn get_content(&self, target: &str) -> Result<String, ApiError>
Get the plain-text content for an agent.
Sourcepub fn get_transcript(
&self,
target: &str,
) -> Result<Vec<TranscriptRecord>, ApiError>
pub fn get_transcript( &self, target: &str, ) -> Result<Vec<TranscriptRecord>, ApiError>
Get transcript records for an agent (used for hybrid scrollback preview).
Returns parsed JSONL records from the agent’s Claude Code conversation log. The records are looked up by pane_id from the transcript registry.
Sourcepub fn list_teams(&self) -> Vec<TeamSummary>
pub fn list_teams(&self) -> Vec<TeamSummary>
List all known teams as owned summaries.
Sourcepub fn get_team(&self, name: &str) -> Result<TeamSummary, ApiError>
pub fn get_team(&self, name: &str) -> Result<TeamSummary, ApiError>
Get a single team summary by name.
Sourcepub fn get_team_tasks(&self, name: &str) -> Result<Vec<TeamTaskInfo>, ApiError>
pub fn get_team_tasks(&self, name: &str) -> Result<Vec<TeamTaskInfo>, ApiError>
Get tasks for a team.
Sourcepub fn config_audit(&self) -> ScanResult
pub fn config_audit(&self) -> ScanResult
Run a config audit and cache the result in state.
Acquires a read lock to gather project directories, releases it, runs the audit (no lock held), then acquires a write lock to store the result.
Sourcepub fn last_config_audit(&self) -> Option<ScanResult>
pub fn last_config_audit(&self) -> Option<ScanResult>
Get the last cached config audit result (no new audit).
Sourcepub fn is_running(&self) -> bool
pub fn is_running(&self) -> bool
Check if the application is still running.
Sourcepub fn known_directories(&self) -> Vec<String>
pub fn known_directories(&self) -> Vec<String>
Get known working directories from current agents.
Sourcepub fn list_projects(&self) -> Vec<String>
pub fn list_projects(&self) -> Vec<String>
List registered project directories.
Auto Trait Implementations§
impl !Freeze for TmaiCore
impl !RefUnwindSafe for TmaiCore
impl Send for TmaiCore
impl Sync for TmaiCore
impl Unpin for TmaiCore
impl UnsafeUnpin for TmaiCore
impl !UnwindSafe for TmaiCore
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.