meshcode 2.10.31__tar.gz → 2.10.33__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.31 → meshcode-2.10.33}/PKG-INFO +1 -1
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/__init__.py +1 -1
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/server.py +36 -5
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.10.31 → meshcode-2.10.33}/pyproject.toml +1 -1
- {meshcode-2.10.31 → meshcode-2.10.33}/README.md +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/cli.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/invites.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/launcher.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/preferences.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/run_agent.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/secrets.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/self_update.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/setup.cfg +0 -0
- {meshcode-2.10.31 → meshcode-2.10.33}/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.33"
|
|
@@ -1270,11 +1270,23 @@ async def lifespan(_app):
|
|
|
1270
1270
|
# FastMCP server
|
|
1271
1271
|
# ============================================================
|
|
1272
1272
|
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1273
|
+
_DISABLE_LIFESPAN = os.environ.get("MESHCODE_DISABLE_LIFESPAN", "").lower() in ("1", "true", "yes")
|
|
1274
|
+
if _DISABLE_LIFESPAN:
|
|
1275
|
+
# Diagnostic mode (2.10.33): bypass lifespan entirely to isolate whether
|
|
1276
|
+
# the Realtime + heartbeat + boot-event machinery is what dies under ESC.
|
|
1277
|
+
# Realtime won't subscribe; meshcode_wait will degrade to DB polling.
|
|
1278
|
+
# meshcode_debug_sleep still works and is our smoke test.
|
|
1279
|
+
mcp = FastMCP(
|
|
1280
|
+
name=f"meshcode-{PROJECT_NAME}-{AGENT_NAME}",
|
|
1281
|
+
instructions=_INSTRUCTIONS,
|
|
1282
|
+
)
|
|
1283
|
+
print("[meshcode-mcp] LIFESPAN DISABLED (MESHCODE_DISABLE_LIFESPAN=1) — diagnostic mode", file=sys.stderr, flush=True)
|
|
1284
|
+
else:
|
|
1285
|
+
mcp = FastMCP(
|
|
1286
|
+
name=f"meshcode-{PROJECT_NAME}-{AGENT_NAME}",
|
|
1287
|
+
instructions=_INSTRUCTIONS,
|
|
1288
|
+
lifespan=lifespan,
|
|
1289
|
+
)
|
|
1278
1290
|
# Belt-and-suspenders: some FastMCP versions don't forward `instructions=` to
|
|
1279
1291
|
# the underlying lowlevel server's InitializeResult. Set it directly too.
|
|
1280
1292
|
try:
|
|
@@ -1285,6 +1297,25 @@ except Exception:
|
|
|
1285
1297
|
|
|
1286
1298
|
# ----------------- TOOLS -----------------
|
|
1287
1299
|
|
|
1300
|
+
@mcp.tool()
|
|
1301
|
+
async def meshcode_debug_sleep(seconds: int = 30) -> Dict[str, Any]:
|
|
1302
|
+
"""DEBUG-ONLY: sleep N seconds via pure asyncio.sleep (no Realtime, no DB).
|
|
1303
|
+
|
|
1304
|
+
Exists to isolate whether ESC kills meshcode because of our Realtime
|
|
1305
|
+
listener / lifespan infrastructure, or regardless of the tool body.
|
|
1306
|
+
Matches armored.py's sleep_long byte-for-byte at the async layer.
|
|
1307
|
+
"""
|
|
1308
|
+
import asyncio as _asyncio
|
|
1309
|
+
import os as _os
|
|
1310
|
+
try:
|
|
1311
|
+
await _asyncio.sleep(max(1, int(seconds)))
|
|
1312
|
+
return {"ok": True, "slept": int(seconds), "pid": _os.getpid()}
|
|
1313
|
+
except BaseException as e:
|
|
1314
|
+
sys.stderr.write(f"[meshcode-mcp] debug_sleep cancelled with {type(e).__name__}: {e}\n")
|
|
1315
|
+
sys.stderr.flush()
|
|
1316
|
+
raise
|
|
1317
|
+
|
|
1318
|
+
|
|
1288
1319
|
@mcp.tool()
|
|
1289
1320
|
@with_working_status
|
|
1290
1321
|
def meshcode_send(to: str, message: Any, in_reply_to: Optional[str] = None,
|
|
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
|