meshcode 2.10.64__tar.gz → 2.10.65__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 (49) hide show
  1. {meshcode-2.10.64 → meshcode-2.10.65}/PKG-INFO +1 -1
  2. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/__init__.py +1 -1
  3. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/comms_v4.py +41 -4
  4. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode.egg-info/PKG-INFO +1 -1
  5. {meshcode-2.10.64 → meshcode-2.10.65}/pyproject.toml +1 -1
  6. {meshcode-2.10.64 → meshcode-2.10.65}/README.md +0 -0
  7. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/ascii_art.py +0 -0
  8. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/cli.py +0 -0
  9. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/compat.py +0 -0
  10. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/error_hints.py +0 -0
  11. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/exceptions.py +0 -0
  12. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/invites.py +0 -0
  13. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/launcher.py +0 -0
  14. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/launcher_install.py +0 -0
  15. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/__init__.py +0 -0
  16. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/__main__.py +0 -0
  17. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/backend.py +0 -0
  18. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/realtime.py +0 -0
  19. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/server.py +0 -0
  20. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/test_backend.py +0 -0
  21. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  22. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  23. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/preferences.py +0 -0
  24. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/protocol_v2.py +0 -0
  25. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/quickstart.py +0 -0
  26. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/run_agent.py +0 -0
  27. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/secrets.py +0 -0
  28. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/self_update.py +0 -0
  29. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/setup_clients.py +0 -0
  30. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/supervisor.py +0 -0
  31. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode/upload.py +0 -0
  32. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode.egg-info/SOURCES.txt +0 -0
  33. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode.egg-info/dependency_links.txt +0 -0
  34. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode.egg-info/entry_points.txt +0 -0
  35. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode.egg-info/requires.txt +0 -0
  36. {meshcode-2.10.64 → meshcode-2.10.65}/meshcode.egg-info/top_level.txt +0 -0
  37. {meshcode-2.10.64 → meshcode-2.10.65}/setup.cfg +0 -0
  38. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_core.py +0 -0
  39. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_cross_agent_messaging.py +0 -0
  40. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_esc_deaf_state.py +0 -0
  41. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_exceptions.py +0 -0
  42. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_mark_read_batch.py +0 -0
  43. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_migration_integrity.py +0 -0
  44. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_realtime_event_freshness.py +0 -0
  45. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_rls_cross_tenant.py +0 -0
  46. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_rpc_migrations.py +0 -0
  47. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_security_regressions.py +0 -0
  48. {meshcode-2.10.64 → meshcode-2.10.65}/tests/test_sentinel.py +0 -0
  49. {meshcode-2.10.64 → meshcode-2.10.65}/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.64
3
+ Version: 2.10.65
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,5 +1,5 @@
1
1
  """MeshCode — Real-time communication between AI agents."""
2
- __version__ = "2.10.64"
2
+ __version__ = "2.10.65"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -1467,8 +1467,34 @@ def show_board(project):
1467
1467
  print(f" {project.upper()} — Board")
1468
1468
  print(f"{'='*60}")
1469
1469
  for a in agents:
1470
- icon = {"online": "●", "working": "▶", "blocked": "■", "standby": "◆", "idle": "○", "done": "✓"}.get(a.get("status", ""), "?")
1470
+ icon = {"online": "●", "working": "▶", "blocked": "■", "standby": "◆",
1471
+ "idle": "○", "done": "✓", "sleeping": "☾", "offline": "✗",
1472
+ "waiting": "◎"}.get(a.get("status", ""), "?")
1471
1473
  print(f" {icon} {a['name']:<14} {a.get('status','?'):<10} {a.get('task','')}")
1474
+
1475
+ # Enhanced: show health + tasks + activity from dashboard summary
1476
+ if _ak:
1477
+ try:
1478
+ summary = sb_rpc("mc_get_dashboard_summary", {"p_api_key": _ak})
1479
+ if isinstance(summary, dict) and summary.get("ok"):
1480
+ h = summary.get("health", {})
1481
+ print(f"\n{'-'*60}")
1482
+ print(f" Health: {h.get('active_agents',0)}/{h.get('total_agents',0)} agents active"
1483
+ f" | {h.get('open_tasks',0)} open tasks"
1484
+ f" | {h.get('messages_today',0)} messages today")
1485
+ tasks = summary.get("tasks", [])
1486
+ if tasks:
1487
+ print(f"\n Open tasks:")
1488
+ for t in tasks[:5]:
1489
+ prio_icon = {"urgent": "!!", "high": "!", "normal": " ", "low": "."}.get(t.get("priority", ""), " ")
1490
+ print(f" [{prio_icon}] {t.get('title','')[:50]} ({t.get('assignee','?')})")
1491
+ activity = summary.get("activity", [])
1492
+ if activity:
1493
+ print(f"\n Recent activity:")
1494
+ for e in activity[:5]:
1495
+ print(f" {e.get('agent','?')}: {e.get('summary','')[:50]}")
1496
+ except Exception:
1497
+ pass
1472
1498
  print()
1473
1499
 
1474
1500
 
@@ -2040,11 +2066,11 @@ def cmd_doctor(flags, pos):
2040
2066
  else:
2041
2067
  fail("API key", "not found. Run: meshcode login <api_key>")
2042
2068
 
2043
- # 4c. MCP server import test
2069
+ # 4c. MCP server import test (lightweight — only test backend, not full server)
2044
2070
  try:
2045
2071
  import importlib
2046
- _mod = importlib.import_module("meshcode.meshcode_mcp.server")
2047
- ok("MCP server", "module imports cleanly")
2072
+ _mod = importlib.import_module("meshcode.meshcode_mcp.backend")
2073
+ ok("MCP server", "core module imports cleanly")
2048
2074
  except Exception as e:
2049
2075
  fail("MCP server", f"import error: {e}. Run: pip install --upgrade meshcode")
2050
2076
 
@@ -2576,6 +2602,17 @@ if __name__ == "__main__":
2576
2602
  pass
2577
2603
 
2578
2604
  if len(sys.argv) < 2:
2605
+ # First-run detection: no credentials = new user
2606
+ _config = Path.home() / ".meshcode"
2607
+ _has_creds = (_config / "profile_meta.json").exists() if _config.exists() else False
2608
+ if not _has_creds:
2609
+ print()
2610
+ print(" Welcome to MeshCode!")
2611
+ print(" First time? Run: meshcode quickstart")
2612
+ print(" Already have an API key? Run: meshcode login <api_key>")
2613
+ print(" Need help? Run: meshcode doctor")
2614
+ print()
2615
+ sys.exit(0)
2579
2616
  show_help()
2580
2617
  sys.exit(0)
2581
2618
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.10.64
3
+ Version: 2.10.65
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.64"
7
+ version = "2.10.65"
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