meshcode 2.6.9__tar.gz → 2.7.1__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 (31) hide show
  1. {meshcode-2.6.9 → meshcode-2.7.1}/PKG-INFO +1 -1
  2. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/__init__.py +1 -1
  3. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/backend.py +8 -0
  4. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/realtime.py +7 -1
  5. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/server.py +1 -0
  6. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode.egg-info/PKG-INFO +1 -1
  7. {meshcode-2.6.9 → meshcode-2.7.1}/pyproject.toml +1 -1
  8. {meshcode-2.6.9 → meshcode-2.7.1}/README.md +0 -0
  9. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/cli.py +0 -0
  10. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/comms_v4.py +0 -0
  11. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/invites.py +0 -0
  12. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/launcher.py +0 -0
  13. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/launcher_install.py +0 -0
  14. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/__init__.py +0 -0
  15. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/__main__.py +0 -0
  16. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/test_backend.py +0 -0
  17. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  18. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  19. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/preferences.py +0 -0
  20. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/protocol_v2.py +0 -0
  21. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/run_agent.py +0 -0
  22. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/secrets.py +0 -0
  23. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/self_update.py +0 -0
  24. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode/setup_clients.py +0 -0
  25. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode.egg-info/SOURCES.txt +0 -0
  26. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode.egg-info/dependency_links.txt +0 -0
  27. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode.egg-info/entry_points.txt +0 -0
  28. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode.egg-info/requires.txt +0 -0
  29. {meshcode-2.6.9 → meshcode-2.7.1}/meshcode.egg-info/top_level.txt +0 -0
  30. {meshcode-2.6.9 → meshcode-2.7.1}/setup.cfg +0 -0
  31. {meshcode-2.6.9 → meshcode-2.7.1}/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.6.9
3
+ Version: 2.7.1
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.6.9"
2
+ __version__ = "2.7.1"
@@ -36,6 +36,14 @@ def _load_env_file() -> Dict[str, str]:
36
36
  _env_file = _load_env_file()
37
37
  SUPABASE_URL = os.environ.get("SUPABASE_URL") or _env_file.get("SUPABASE_URL") or _DEFAULT_SUPABASE_URL
38
38
  SUPABASE_KEY = os.environ.get("SUPABASE_KEY") or _env_file.get("SUPABASE_KEY") or _DEFAULT_SUPABASE_KEY
39
+ SUPABASE_SERVICE_ROLE_KEY = (
40
+ os.environ.get("SUPABASE_SERVICE_ROLE_KEY")
41
+ or os.environ.get("SUPABASE_SECRET_KEY")
42
+ or _env_file.get("SUPABASE_SERVICE_ROLE_KEY")
43
+ or _env_file.get("SUPABASE_SECRET_KEY")
44
+ or _env_file.get("NEW_SUPABASE_SECRET")
45
+ or ""
46
+ )
39
47
  SCHEMA = "meshcode"
40
48
 
41
49
 
@@ -44,12 +44,14 @@ class RealtimeListener:
44
44
  project_id: str,
45
45
  agent_name: str,
46
46
  notify_callback: Optional[Callable[[Dict], Awaitable[None]]] = None,
47
+ service_role_key: Optional[str] = None,
47
48
  ):
48
49
  self.supabase_url = supabase_url
49
50
  self.supabase_key = supabase_key
50
51
  self.project_id = project_id
51
52
  self.agent_name = agent_name
52
53
  self.notify_callback = notify_callback
54
+ self.service_role_key = service_role_key
53
55
 
54
56
  # Last 100 unread messages — drained by meshcode_check tool
55
57
  self.queue: Deque[Dict] = deque(maxlen=100)
@@ -67,7 +69,11 @@ class RealtimeListener:
67
69
  @property
68
70
  def ws_url(self) -> str:
69
71
  host = self.supabase_url.replace("https://", "").replace("http://", "").rstrip("/")
70
- return f"wss://{host}/realtime/v1/websocket?apikey={self.supabase_key}&vsn=1.0.0"
72
+ # Use service_role_key for WebSocket auth if available — bypasses RLS
73
+ # so Realtime can deliver INSERT events without needing auth.uid().
74
+ # Falls back to publishable key (requires anon RLS policy).
75
+ key = self.service_role_key or self.supabase_key
76
+ return f"wss://{host}/realtime/v1/websocket?apikey={key}&vsn=1.0.0"
71
77
 
72
78
  async def start(self) -> None:
73
79
  if not WEBSOCKETS_AVAILABLE:
@@ -1040,6 +1040,7 @@ async def lifespan(_app):
1040
1040
  project_id=_PROJECT_ID,
1041
1041
  agent_name=AGENT_NAME,
1042
1042
  notify_callback=_on_new_message,
1043
+ service_role_key=be.SUPABASE_SERVICE_ROLE_KEY or None,
1043
1044
  )
1044
1045
  await _REALTIME.start()
1045
1046
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.6.9
3
+ Version: 2.7.1
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.6.9"
7
+ version = "2.7.1"
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
File without changes
File without changes
File without changes
File without changes
File without changes