| 973 | |
| 974 | #[cfg(unix)] |
| 975 | async fn update_proxy_handshake_from_initialize( |
| 976 | base_handshake: &DaemonHandshake, |
| 977 | handshake: &mut DaemonHandshake, |
| 978 | line: &str, |
| 979 | ) { |
| 980 | let Ok(request) = serde_json::from_str::<JsonRpcRequest>(line.trim()) else { |
| 981 | return; |
| 982 | }; |
| 983 | if request.method != "initialize" { |
| 984 | return; |
| 985 | } |
| 986 | *handshake = base_handshake.clone(); |
| 987 | if !base_handshake.allow_initialize_root_routing { |
| 988 | return; |
| 989 | } |
| 990 | let Some(registry) = |
| 991 | crate::global_db::GlobalDb::open_at(&base_handshake.client_identity.global_db_path).await |
| 992 | else { |
| 993 | return; |
| 994 | }; |
| 995 | let Some(project_path) = crate::mcp::server::resolve_initialize_roots_project_path( |
| 996 | request.params.as_ref(), |
| 997 | Some(®istry), |
| 998 | ) |
| 999 | .await |
| 1000 | else { |
| 1001 | return; |
| 1002 | }; |
| 1003 | if base_handshake.project_path.as_deref() != Some(project_path.as_path()) { |
| 1004 | handshake.scope_prefix = None; |
| 1005 | } |
| 1006 | handshake.project_path = Some(project_path); |
| 1007 | } |
| 1008 | |
| 1009 | #[cfg(unix)] |
| 1010 | async fn proxy_request_line_to_daemon( |