meshcode 2.6.9__tar.gz → 2.7.0__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.0}/PKG-INFO +1 -1
  2. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/__init__.py +1 -1
  3. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/backend.py +8 -0
  4. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/realtime.py +17 -0
  5. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/server.py +1 -0
  6. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode.egg-info/PKG-INFO +1 -1
  7. {meshcode-2.6.9 → meshcode-2.7.0}/pyproject.toml +1 -1
  8. {meshcode-2.6.9 → meshcode-2.7.0}/README.md +0 -0
  9. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/cli.py +0 -0
  10. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/comms_v4.py +0 -0
  11. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/invites.py +0 -0
  12. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/launcher.py +0 -0
  13. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/launcher_install.py +0 -0
  14. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/__init__.py +0 -0
  15. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/__main__.py +0 -0
  16. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/test_backend.py +0 -0
  17. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  18. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  19. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/preferences.py +0 -0
  20. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/protocol_v2.py +0 -0
  21. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/run_agent.py +0 -0
  22. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/secrets.py +0 -0
  23. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/self_update.py +0 -0
  24. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode/setup_clients.py +0 -0
  25. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode.egg-info/SOURCES.txt +0 -0
  26. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode.egg-info/dependency_links.txt +0 -0
  27. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode.egg-info/entry_points.txt +0 -0
  28. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode.egg-info/requires.txt +0 -0
  29. {meshcode-2.6.9 → meshcode-2.7.0}/meshcode.egg-info/top_level.txt +0 -0
  30. {meshcode-2.6.9 → meshcode-2.7.0}/setup.cfg +0 -0
  31. {meshcode-2.6.9 → meshcode-2.7.0}/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.0
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.0"
@@ -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)
@@ -127,6 +129,21 @@ class RealtimeListener:
127
129
  self._connected = True
128
130
  log.info(f"Realtime connected for agent={self.agent_name}")
129
131
 
132
+ # Elevate auth context if service_role_key is available.
133
+ # This lets Supabase Realtime bypass RLS for INSERT event delivery,
134
+ # so mc_user_has_project_access (which needs auth.uid()) is not required.
135
+ if self.service_role_key:
136
+ try:
137
+ await ws.send(json.dumps({
138
+ "topic": "realtime:*",
139
+ "event": "access_token",
140
+ "payload": {"access_token": self.service_role_key},
141
+ "ref": "auth",
142
+ }))
143
+ log.info("Realtime auth elevated with service_role_key")
144
+ except Exception as e:
145
+ log.warning(f"Failed to send access_token: {e}")
146
+
130
147
  # Phoenix channel join: phoenix realtime topic
131
148
  topic = f"realtime:{self.project_id}-{self.agent_name}"
132
149
  join_msg = {
@@ -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.0
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.0"
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