Feature chore bug 005 #19

Merged
iamdoubz merged 106 commits from feature_chore_bug_005 into main 2026-07-07 22:02:41 -05:00
Showing only changes of commit 49cc1e6cd3 - Show all commits
+17 -11
View File
@@ -23,14 +23,18 @@ use tauri::{AppHandle, Emitter};
/// Shared handle the HTTP/stdio transports build a fresh `rmcp` service
/// around per-connection (`ServerHandler` methods take `&self`, so this just
/// needs to be `Clone` + cheap — it's an `Arc<Store>` and an `AppHandle`).
/// `app` is `None` in `--mcp-stdio` mode (a separate process with no Tauri
/// window to emit events to, see `mcp::stdio_transport`/`main.rs`) — the
/// `mcp_access_log` row is still written either way (FR-MCP-5), only the
/// live `"mcp://access"` event has nowhere to go.
#[derive(Clone)]
pub struct WaMcpHandler {
store: Arc<dyn Store>,
app: AppHandle,
app: Option<AppHandle>,
}
impl WaMcpHandler {
pub fn new(store: Arc<dyn Store>, app: AppHandle) -> Self {
pub fn new(store: Arc<dyn Store>, app: Option<AppHandle>) -> Self {
Self { store, app }
}
@@ -48,15 +52,17 @@ impl WaMcpHandler {
if let Err(e) = self.store.record_mcp_access(tool, meeting_id, client).await {
tracing::warn!("failed to record mcp access log row: {e}");
}
let _ = self.app.emit(
"mcp://access",
json!({
"at": now_ms(),
"tool": tool,
"meetingId": meeting_id,
"client": client,
}),
);
if let Some(app) = &self.app {
let _ = app.emit(
"mcp://access",
json!({
"at": now_ms(),
"tool": tool,
"meetingId": meeting_id,
"client": client,
}),
);
}
}
fn client_name(context: &RequestContext<RoleServer>) -> Option<String> {