meshcode 2.10.27__tar.gz → 2.10.28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {meshcode-2.10.27 → meshcode-2.10.28}/PKG-INFO +1 -1
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/__init__.py +1 -1
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/server.py +39 -18
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.10.27 → meshcode-2.10.28}/pyproject.toml +1 -1
- {meshcode-2.10.27 → meshcode-2.10.28}/README.md +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/cli.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/invites.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/launcher.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/preferences.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/run_agent.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/secrets.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/self_update.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/setup.cfg +0 -0
- {meshcode-2.10.27 → meshcode-2.10.28}/tests/test_status_enum_coverage.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""MeshCode — Real-time communication between AI agents."""
|
|
2
|
-
__version__ = "2.10.
|
|
2
|
+
__version__ = "2.10.28"
|
|
@@ -2811,24 +2811,45 @@ def run_server():
|
|
|
2811
2811
|
# accidental stdout writes from corrupting the MCP protocol.
|
|
2812
2812
|
sys.stdout = _REAL_STDOUT
|
|
2813
2813
|
|
|
2814
|
-
# Claude Code cancels tool calls on ESC via
|
|
2815
|
-
#
|
|
2816
|
-
#
|
|
2817
|
-
#
|
|
2818
|
-
#
|
|
2819
|
-
#
|
|
2820
|
-
#
|
|
2821
|
-
#
|
|
2822
|
-
# SIG_IGN
|
|
2823
|
-
#
|
|
2824
|
-
#
|
|
2825
|
-
#
|
|
2826
|
-
# the
|
|
2814
|
+
# Claude Code cancels tool calls on ESC via multiple side channels that
|
|
2815
|
+
# are destructive to the stdio subprocess. 2.10.26's SIG_IGN-on-SIGINT
|
|
2816
|
+
# fix was incomplete in the wild (2.10.27 field test died anyway), so we
|
|
2817
|
+
# widen the net: ignore every signal Claude Code is known to send on
|
|
2818
|
+
# cancellation and log any that arrive so we can see what actually fires.
|
|
2819
|
+
#
|
|
2820
|
+
# SIGINT — kernel default: terminate. asyncio Runner also installs a
|
|
2821
|
+
# cancel-main-task handler, but only if the current handler is
|
|
2822
|
+
# default_int_handler; SIG_IGN here trips that guard.
|
|
2823
|
+
# SIGTERM — kernel default: terminate. Some Claude Code versions send
|
|
2824
|
+
# this after SIGINT if the subprocess didn't exit fast enough.
|
|
2825
|
+
# SIGHUP — kernel default: terminate. Sent when the controlling tty
|
|
2826
|
+
# detaches or the parent process restructures its session.
|
|
2827
|
+
# SIGPIPE — kernel default: terminate. Fires when Claude Code closes its
|
|
2828
|
+
# side of stdout while we're mid-write. Ignoring makes the
|
|
2829
|
+
# write fail with EPIPE instead of killing us.
|
|
2830
|
+
#
|
|
2831
|
+
# SIGKILL and SIGSTOP cannot be caught — that is how the process is
|
|
2832
|
+
# meant to be forcibly stopped (`kill -9 <pid>` still works). stdin EOF
|
|
2833
|
+
# is untouched and remains the clean-shutdown signal for session end.
|
|
2827
2834
|
import signal
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2835
|
+
def _diag_ignore(signum, frame): # pragma: no cover - signal handler
|
|
2836
|
+
try:
|
|
2837
|
+
name = signal.Signals(signum).name
|
|
2838
|
+
except Exception:
|
|
2839
|
+
name = f"signal-{signum}"
|
|
2840
|
+
try:
|
|
2841
|
+
sys.stderr.write(f"[meshcode-mcp] received {name} ({signum}); ignored to keep MCP alive during tool cancellation\n")
|
|
2842
|
+
sys.stderr.flush()
|
|
2843
|
+
except Exception:
|
|
2844
|
+
pass
|
|
2845
|
+
for _sig_name in ("SIGINT", "SIGTERM", "SIGHUP", "SIGPIPE"):
|
|
2846
|
+
_sig = getattr(signal, _sig_name, None)
|
|
2847
|
+
if _sig is None:
|
|
2848
|
+
continue
|
|
2849
|
+
try:
|
|
2850
|
+
signal.signal(_sig, _diag_ignore)
|
|
2851
|
+
except (ValueError, OSError):
|
|
2852
|
+
# Non-main thread or Windows doesn't expose the signal — harmless.
|
|
2853
|
+
pass
|
|
2833
2854
|
|
|
2834
2855
|
mcp.run()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|