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.
Files changed (32) hide show
  1. {meshcode-2.10.31 → meshcode-2.10.33}/PKG-INFO +1 -1
  2. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/__init__.py +1 -1
  3. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/server.py +36 -5
  4. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/PKG-INFO +1 -1
  5. {meshcode-2.10.31 → meshcode-2.10.33}/pyproject.toml +1 -1
  6. {meshcode-2.10.31 → meshcode-2.10.33}/README.md +0 -0
  7. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/ascii_art.py +0 -0
  8. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/cli.py +0 -0
  9. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/comms_v4.py +0 -0
  10. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/invites.py +0 -0
  11. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/launcher.py +0 -0
  12. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/launcher_install.py +0 -0
  13. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/__init__.py +0 -0
  14. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/__main__.py +0 -0
  15. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/backend.py +0 -0
  16. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/realtime.py +0 -0
  17. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/test_backend.py +0 -0
  18. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  19. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  20. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/preferences.py +0 -0
  21. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/protocol_v2.py +0 -0
  22. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/run_agent.py +0 -0
  23. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/secrets.py +0 -0
  24. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/self_update.py +0 -0
  25. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode/setup_clients.py +0 -0
  26. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/SOURCES.txt +0 -0
  27. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/dependency_links.txt +0 -0
  28. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/entry_points.txt +0 -0
  29. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/requires.txt +0 -0
  30. {meshcode-2.10.31 → meshcode-2.10.33}/meshcode.egg-info/top_level.txt +0 -0
  31. {meshcode-2.10.31 → meshcode-2.10.33}/setup.cfg +0 -0
  32. {meshcode-2.10.31 → meshcode-2.10.33}/tests/test_status_enum_coverage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.10.31
3
+ Version: 2.10.33
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -1,2 +1,2 @@
1
1
  """MeshCode — Real-time communication between AI agents."""
2
- __version__ = "2.10.31"
2
+ __version__ = "2.10.33"
@@ -1270,11 +1270,23 @@ async def lifespan(_app):
1270
1270
  # FastMCP server
1271
1271
  # ============================================================
1272
1272
 
1273
- mcp = FastMCP(
1274
- name=f"meshcode-{PROJECT_NAME}-{AGENT_NAME}",
1275
- instructions=_INSTRUCTIONS,
1276
- lifespan=lifespan,
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,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.10.31
3
+ Version: 2.10.33
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meshcode"
7
- version = "2.10.31"
7
+ version = "2.10.33"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
File without changes
File without changes
File without changes