You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(mcp): drain elicitation_rx concurrently in run_inline_tool_loop (#2548)
* fix(mcp): drain elicitation_rx concurrently in run_inline_tool_loop (#2542)
Phase 3 fix for elicitation deadlock. run_inline_tool_loop called
execute_tool_call_erased sequentially without draining elicitation_rx,
causing deadlock when an MCP tool sent an elicitation event and blocked
waiting for a response.
- Change run_inline_tool_loop to &mut self
- Wrap each execute_tool_call_erased call in tokio::select! that
concurrently drains elicitation_rx and calls handle_elicitation_event
- Change handle_elicitation_event to pub(super) for cross-module access
- Add regression test with blocking executor that simulates the real
MCP deadlock scenario; test times out in 5s if deadlock recurs
* docs: update CHANGELOG for #2542 elicitation deadlock fix
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,7 +31,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
31
31
32
32
- fix(classifiers): add configurable `pii_ner_allowlist` to `ClassifiersConfig` — tokens matching an allowlist entry (case-insensitive) are never redacted by the piiranha NER model, suppressing false positives such as "Zeph" → `[PII:CITY]`; default entries: `["Zeph", "Rust", "OpenAI", "Ollama", "Claude"]`; list is empty-able via config to disable the feature (closes #2537)
33
33
- fix(classifiers): document that macOS Apple Silicon requires `--features full,metal` for piiranha NER GPU acceleration; without `metal`, the 1.1 GB model exceeds the 30s timeout on CPU and falls back to regex-only PII detection (closes #2538)
34
-
34
+
- fix(mcp): elicitation deadlock in `run_inline_tool_loop` (phase 3, closes #2542) — `run_inline_tool_loop` now wraps each `execute_tool_call_erased` call in `tokio::select!` that concurrently drains `elicitation_rx`; `handle_elicitation_event` changed to `pub(super)` for cross-module access; regression test added with a blocking executor that simulates the real MCP deadlock scenario
35
35
- fix(tools): propagate `claim_source` from `ToolOutput` into the post-execution audit entry in `AdversarialPolicyGateExecutor`; `write_audit` now accepts an explicit `claim_source` parameter so the field is no longer hardcoded to `None` for successful executions (closes #2535)
36
36
- fix(tools): `extract_paths` now detects relative path tokens that contain `/` but do not start with `/` or `./` (e.g. `src/main.rs`, `.local/foo/bar`); URL schemes (`://`) and shell variable assignments (`KEY=value`) are excluded from matching (closes #2536)
0 commit comments