huskies: merge 1163 story Replace perm_rx lock-as-presence-signal with a permission router
This commit is contained in:
@@ -24,7 +24,7 @@ const GATEWAY_TOOLS: &[&str] = &[
|
||||
"adopt_project",
|
||||
"aggregate_pipeline_status",
|
||||
"agents.list",
|
||||
// Handled at the gateway so the Matrix bot's perm_rx listener is used
|
||||
// Handled at the gateway so the Matrix bot's permission listener is used
|
||||
// rather than the container's (which has no interactive session attached).
|
||||
"prompt_permission",
|
||||
// One-shot container rebuild: build fresh image, swap container, preserve state.
|
||||
@@ -764,9 +764,9 @@ async fn handle_aggregate_pipeline_status_tool(
|
||||
/// Handle the `prompt_permission` tool at the gateway level.
|
||||
///
|
||||
/// Mirrors `tool_prompt_permission` in `http/mcp/diagnostics/permission.rs` but
|
||||
/// uses the gateway's `perm_tx`/`perm_rx` so requests reach the Matrix bot that
|
||||
/// is listening on the gateway, not the proxied container (which has no
|
||||
/// interactive session and would auto-deny immediately).
|
||||
/// uses the gateway's `perm_tx`/`permission_registry` so requests reach the
|
||||
/// Matrix bot that is listening on the gateway, not the proxied container
|
||||
/// (which has no interactive session and would auto-deny immediately).
|
||||
async fn handle_prompt_permission_tool(
|
||||
params: &Value,
|
||||
state: &GatewayState,
|
||||
@@ -792,9 +792,9 @@ async fn handle_prompt_permission_tool(
|
||||
return JsonRpcResponse::success(id, json!({"content": [{"type": "text", "text": text}]}));
|
||||
}
|
||||
|
||||
// Auto-deny when no interactive session holds perm_rx (i.e. no Matrix bot
|
||||
// listener is running — try_lock succeeds when nobody else holds the lock).
|
||||
if state.perm_rx.try_lock().is_ok() {
|
||||
// Auto-deny when no responder is registered (i.e. no Matrix bot listener
|
||||
// is running).
|
||||
if state.permission_registry.is_empty() {
|
||||
crate::slog!("[gateway/permission] Auto-denied '{tool_name}' (no interactive session)");
|
||||
let text = json!({
|
||||
"behavior": "deny",
|
||||
|
||||
Reference in New Issue
Block a user