diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-16 22:12:44 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-16 22:17:09 +0300 |
| commit | 0b831c86274486af9f9f7052c2534374b498bb3a (patch) | |
| tree | 3e8130be85cb387c8c3e57591617c4c7be0a26ec /src/workspace.rs | |
| parent | 318e6a3033b61082d9c330c79ef584cf37e6c6d0 (diff) | |
feat: allow hook-reported custom agent labels
Diffstat (limited to 'src/workspace.rs')
| -rw-r--r-- | src/workspace.rs | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/workspace.rs b/src/workspace.rs index 23d9a8e1..30e968fe 100644 --- a/src/workspace.rs +++ b/src/workspace.rs @@ -289,20 +289,17 @@ impl Tab { .pane_ids() .iter() .filter_map(|id| { - let pane = self.panes.get(id); - let agent = pane.and_then(|p| p.detected_agent)?; - let state = pane.map(|p| p.state).unwrap_or(AgentState::Unknown); - let seen = pane.map(|p| p.seen).unwrap_or(true); - let agent_label = agent_name(agent).to_string(); + let pane = self.panes.get(id)?; + let agent_label = pane.effective_agent_label()?.to_string(); Some(PaneDetail { pane_id: *id, tab_idx: self.number.saturating_sub(1), tab_label: self.display_name(), label: agent_label.clone(), agent_label, - agent: Some(agent), - state, - seen, + agent: pane.effective_known_agent(), + state: pane.state, + seen: pane.seen, }) }) .collect() @@ -740,22 +737,6 @@ fn pane_attention_priority(state: AgentState, seen: bool) -> u8 { } } -fn agent_name(agent: Agent) -> &'static str { - match agent { - Agent::Pi => "pi", - Agent::Claude => "claude", - Agent::Codex => "codex", - Agent::Gemini => "gemini", - Agent::Cursor => "cursor", - Agent::Cline => "cline", - Agent::OpenCode => "opencode", - Agent::GithubCopilot => "copilot", - Agent::Kimi => "kimi", - Agent::Droid => "droid", - Agent::Amp => "amp", - } -} - pub fn derive_label_from_cwd(cwd: &Path) -> String { if let Some(repo_root) = git_repo_root(cwd) { if let Some(name) = repo_root.file_name().and_then(|n| n.to_str()) { @@ -1091,4 +1072,25 @@ mod tests { assert!(details.iter().any(|detail| detail.label == "main·pi")); assert!(details.iter().any(|detail| detail.label == "logs·claude")); } + + #[test] + fn pane_details_include_hook_reported_unknown_agents() { + let mut ws = Workspace::test_new("test"); + let root_pane = ws.tabs[0].root_pane; + ws.tabs[0] + .panes + .get_mut(&root_pane) + .unwrap() + .set_hook_authority( + "custom:hermes".into(), + "hermes".into(), + AgentState::Working, + None, + ); + + let details = ws.pane_details(); + assert_eq!(details.len(), 1); + assert_eq!(details[0].agent_label, "hermes"); + assert_eq!(details[0].agent, None); + } } |
