meshcode 2.11.97__tar.gz → 2.11.99__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 (91) hide show
  1. {meshcode-2.11.97 → meshcode-2.11.99}/PKG-INFO +1 -1
  2. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/__main__.py +9 -7
  4. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/server.py +32 -0
  5. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode.egg-info/PKG-INFO +1 -1
  6. {meshcode-2.11.97 → meshcode-2.11.99}/pyproject.toml +1 -1
  7. {meshcode-2.11.97 → meshcode-2.11.99}/README.md +0 -0
  8. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/_session_handoff_template.py +0 -0
  9. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/_stop_hook_template.py +0 -0
  10. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/ascii_art.py +0 -0
  11. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/atomic_push.py +0 -0
  12. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/claude_update.py +0 -0
  13. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/cli.py +0 -0
  14. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/comms_v4.py +0 -0
  15. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/compat.py +0 -0
  16. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/daemon.py +0 -0
  17. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/date_parse.py +0 -0
  18. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/doctor.py +0 -0
  19. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/error_hints.py +0 -0
  20. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/exceptions.py +0 -0
  21. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/hostd.py +0 -0
  22. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/invites.py +0 -0
  23. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/launcher.py +0 -0
  24. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/launcher_install.py +0 -0
  25. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/__init__.py +0 -0
  26. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/__main__.py +0 -0
  27. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/backend.py +0 -0
  28. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/realtime.py +0 -0
  29. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  30. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/test_backend.py +0 -0
  31. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  32. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  33. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  34. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  35. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  36. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/preferences.py +0 -0
  37. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/protocol_handler.py +0 -0
  38. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/protocol_v2.py +0 -0
  39. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/quickstart.py +0 -0
  40. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/rpc_allowlist.py +0 -0
  41. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/run_agent.py +0 -0
  42. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/scripts/check_secrets.py +0 -0
  43. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/scripts/race_rate_harness.py +0 -0
  44. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/secrets.py +0 -0
  45. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/self_update.py +0 -0
  46. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/setup_clients.py +0 -0
  47. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/supervisor.py +0 -0
  48. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/up.py +0 -0
  49. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode/upload.py +0 -0
  50. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode.egg-info/SOURCES.txt +0 -0
  51. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode.egg-info/dependency_links.txt +0 -0
  52. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode.egg-info/entry_points.txt +0 -0
  53. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode.egg-info/requires.txt +0 -0
  54. {meshcode-2.11.97 → meshcode-2.11.99}/meshcode.egg-info/top_level.txt +0 -0
  55. {meshcode-2.11.97 → meshcode-2.11.99}/setup.cfg +0 -0
  56. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_auto_update_hardening.py +0 -0
  57. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_autonomous_closegap_1.py +0 -0
  58. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_autonomous_closegap_2.py +0 -0
  59. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_autonomous_closegap_3.py +0 -0
  60. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_autonomous_prompt_inject.py +0 -0
  61. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_boot_bug_regression.py +0 -0
  62. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_color_truecolor.py +0 -0
  63. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_core.py +0 -0
  64. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_cross_agent_messaging.py +0 -0
  65. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_date_parse.py +0 -0
  66. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_doctor.py +0 -0
  67. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_epistemic_v1_python_sdk.py +0 -0
  68. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  69. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_esc_deaf_state.py +0 -0
  70. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_exceptions.py +0 -0
  71. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_file_upload.py +0 -0
  72. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_init_device_code.py +0 -0
  73. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_install_guard.py +0 -0
  74. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_lease_sigterm_release.py +0 -0
  75. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_mark_read_batch.py +0 -0
  76. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_marketplace_ratings.py +0 -0
  77. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_migration_integrity.py +0 -0
  78. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_realtime_event_freshness.py +0 -0
  79. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_rls_cross_tenant.py +0 -0
  80. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_rpc_grants.py +0 -0
  81. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_rpc_migrations.py +0 -0
  82. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_run_agent_dry_run.py +0 -0
  83. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_run_agent_no_server_import.py +0 -0
  84. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_security_regressions.py +0 -0
  85. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_self_update_user_site.py +0 -0
  86. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_sentinel.py +0 -0
  87. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_setup_path.py +0 -0
  88. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_sleep_signals.py +0 -0
  89. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_status_enum_coverage.py +0 -0
  90. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_stay_on_loop_hook.py +0 -0
  91. {meshcode-2.11.97 → meshcode-2.11.99}/tests/test_wait_open_tasks_contradiction.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.97
3
+ Version: 2.11.99
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.11.97"
2
+ __version__ = "2.11.99"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -9,18 +9,20 @@ import sys
9
9
 
10
10
 
11
11
  def main():
12
- # If the user explicitly asked to set up PATH, delegate to the real CLI.
13
- if len(sys.argv) > 1 and sys.argv[1] == "setup-path":
14
- from meshcode import comms_v4 as _cv # noqa: F401
12
+ # ROOT FIX (task 798dd1bd / REOPEN_PATH_bug): dispatch ANY subcommand to the real CLI
13
+ # (comms_v4), not just setup-path. hostd spawns agents via `python -m meshcode run <target>`
14
+ # (so a bg pip can replace the .exe) — that MUST route to the `run` dispatch, NOT fall through
15
+ # to the PATH-help error. Previously only setup-path dispatched, so every `python -m meshcode
16
+ # run` died with the misleading "meshcode not on PATH" message (qa/recycle-demo/respawn boots).
17
+ if len(sys.argv) > 1:
18
+ # runpy imports + executes comms_v4 as __main__; do NOT pre-import it here (a prior
19
+ # `import meshcode.comms_v4` triggers a runpy "found in sys.modules" double-exec warning).
15
20
  sys.argv[0] = "meshcode"
16
- # comms_v4 runs main() at module load via `if __name__ == "__main__"`.
17
- # Re-exec the body by importing as __main__ would require executing
18
- # the module again; simpler: invoke via runpy.
19
21
  import runpy
20
22
  runpy.run_module("meshcode.comms_v4", run_name="__main__", alter_sys=True)
21
23
  return
22
24
 
23
- # Otherwise: the user is here because `meshcode` isn't on PATH.
25
+ # Bare `python -m meshcode` (no subcommand): the user is here because `meshcode` isn't on PATH.
24
26
  print()
25
27
  print(" meshcode is installed but the `meshcode` command isn't on your PATH.")
26
28
  print()
@@ -6171,6 +6171,38 @@ def meshcode_recycle_fleet(visible: bool = False) -> Dict[str, Any]:
6171
6171
  })
6172
6172
 
6173
6173
 
6174
+ @mcp.tool()
6175
+ @with_working_status
6176
+ def meshcode_set_recycle_schedule(interval_hours: int = 6, enabled: bool = True,
6177
+ agent: Optional[str] = None) -> Dict[str, Any]:
6178
+ """Schedule AUTOMATIC recycles for YOUR meshwork — agents auto close+relaunch
6179
+ fresh every N hours to stay clean (remote, auto-renewing).
6180
+
6181
+ FLEET-RECYCLE P2 (task 798dd1bd). Mesh-global: the host's time-mode recycle
6182
+ engine enacts the schedule every `interval_hours`. Commander agent (or human
6183
+ owner) only, scoped to your own meshwork — enforced server-side by
6184
+ mc_set_recycle_schedule_as_agent (authz like mc_agent_power_as_agent).
6185
+
6186
+ Args:
6187
+ interval_hours: recycle the fleet every N hours (default 6).
6188
+ enabled: True = enable the schedule; False = disable it.
6189
+ agent: RESERVED for the per-agent override (fast-follow); currently
6190
+ mesh-global only — leave None.
6191
+ """
6192
+ if agent is not None:
6193
+ return {
6194
+ "ok": False,
6195
+ "error_code": "not_yet_supported",
6196
+ "error": "per-agent recycle schedule is a fast-follow; pass agent=None for the mesh-global schedule.",
6197
+ }
6198
+ return be.sb_rpc("mc_set_recycle_schedule_as_agent", {
6199
+ "p_api_key": _get_api_key(),
6200
+ "p_project_id": _PROJECT_ID,
6201
+ "p_enabled": bool(enabled),
6202
+ "p_interval_hours": int(interval_hours),
6203
+ })
6204
+
6205
+
6174
6206
  @mcp.tool()
6175
6207
  @with_working_status
6176
6208
  def meshcode_set_meshwork_autonomous_default(enabled: bool) -> Dict[str, Any]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.97
3
+ Version: 2.11.99
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.11.97"
7
+ version = "2.11.99"
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