zeph_core/agent/
lsp_commands.rs1use std::fmt::Write as _;
5
6use super::{Agent, error::AgentError};
7use crate::channel::Channel;
8
9impl<C: Channel> Agent<C> {
10 pub async fn handle_lsp_status_command(&mut self) -> Result<(), AgentError> {
16 let mut out = String::new();
17
18 match self.session.lsp_hooks.as_ref() {
19 None => {
20 let _ = writeln!(out, "LSP context injection: disabled");
21 let _ = writeln!(out);
22 let _ = writeln!(
23 out,
24 "Enable with `--lsp-context` flag or set `lsp.enabled = true` in config."
25 );
26 let _ = writeln!(
27 out,
28 "Requires mcpls configured under [mcp.servers] (install: cargo install mcpls)."
29 );
30 }
31 Some(lsp) => {
32 let available = lsp.is_available().await;
33 let _ = writeln!(out, "LSP context injection: enabled");
34 let _ = writeln!(
35 out,
36 "MCP server: {} ({})",
37 lsp.config.mcp_server_id,
38 if available {
39 "connected"
40 } else {
41 "not connected"
42 }
43 );
44 let _ = writeln!(out, "Token budget per turn: {}", lsp.config.token_budget);
45 let _ = writeln!(out);
46 let _ = writeln!(out, "Hooks:");
47 let _ = writeln!(
48 out,
49 " diagnostics-on-save: {}",
50 if lsp.config.diagnostics.enabled {
51 "enabled"
52 } else {
53 "disabled"
54 }
55 );
56 let _ = writeln!(
57 out,
58 " hover-on-read: {}",
59 if lsp.config.hover.enabled {
60 "enabled"
61 } else {
62 "disabled"
63 }
64 );
65 let _ = writeln!(out);
66 let stats = lsp.stats();
67 let _ = writeln!(out, "Session statistics:");
68 let _ = writeln!(
69 out,
70 " diagnostics injected: {}",
71 stats.diagnostics_injected
72 );
73 let _ = writeln!(out, " hover injected: {}", stats.hover_injected);
74 let _ = writeln!(
75 out,
76 " notes dropped (budget): {}",
77 stats.notes_dropped_budget
78 );
79 }
80 }
81
82 self.channel.send(out.trim_end()).await?;
83 Ok(())
84 }
85}