meshcode 2.11.79__tar.gz → 2.11.81__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 (240) hide show
  1. {meshcode-2.11.79 → meshcode-2.11.81}/PKG-INFO +1 -1
  2. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/hostd.py +36 -0
  4. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/server.py +14 -0
  5. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/run_agent.py +17 -0
  6. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/PKG-INFO +1 -1
  7. {meshcode-2.11.79 → meshcode-2.11.81}/pyproject.toml +1 -1
  8. {meshcode-2.11.79 → meshcode-2.11.81}/README.md +0 -0
  9. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/__main__.py +0 -0
  10. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/_stop_hook_template.py +0 -0
  11. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/ascii_art.py +0 -0
  12. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/atomic_push.py +0 -0
  13. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/claude_update.py +0 -0
  14. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/cli.py +0 -0
  15. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/comms_v4.py +0 -0
  16. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/compat.py +0 -0
  17. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/daemon.py +0 -0
  18. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/date_parse.py +0 -0
  19. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/doctor.py +0 -0
  20. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/error_hints.py +0 -0
  21. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/exceptions.py +0 -0
  22. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/invites.py +0 -0
  23. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/launcher.py +0 -0
  24. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/launcher_install.py +0 -0
  25. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/__init__.py +0 -0
  26. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/__main__.py +0 -0
  27. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/backend.py +0 -0
  28. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/realtime.py +0 -0
  29. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  30. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_backend.py +0 -0
  31. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  32. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  33. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  34. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  35. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  36. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/preferences.py +0 -0
  37. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/protocol_handler.py +0 -0
  38. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/protocol_v2.py +0 -0
  39. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/quickstart.py +0 -0
  40. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/rpc_allowlist.py +0 -0
  41. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/scripts/check_secrets.py +0 -0
  42. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/scripts/race_rate_harness.py +0 -0
  43. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/secrets.py +0 -0
  44. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/self_update.py +0 -0
  45. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/setup_clients.py +0 -0
  46. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/supervisor.py +0 -0
  47. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/up.py +0 -0
  48. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/upload.py +0 -0
  49. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/comms_v4.py +0 -0
  50. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  51. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  52. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/cli.py +0 -0
  53. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  54. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/compat.py +0 -0
  55. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  56. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  57. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/invites.py +0 -0
  58. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  59. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  60. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  61. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  62. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  63. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  64. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  65. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  66. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  67. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  68. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  69. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  70. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  71. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  72. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  73. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  74. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  75. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  76. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/upload.py +0 -0
  77. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  78. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_core.py +0 -0
  79. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  80. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  81. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  82. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  83. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  84. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  85. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  86. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  87. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  88. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  89. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  90. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  91. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  92. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  93. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  94. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  95. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  96. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  97. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  98. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  99. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  100. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  101. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  102. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  103. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  104. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  105. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  106. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  107. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  108. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  109. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  110. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  111. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  112. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  113. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  114. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  115. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  116. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  117. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/comms_v4.py +0 -0
  118. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  119. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  120. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/cli.py +0 -0
  121. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  122. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/compat.py +0 -0
  123. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  124. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  125. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/invites.py +0 -0
  126. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  127. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  128. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  129. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  130. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  131. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  132. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  133. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  134. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  135. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  136. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  137. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  138. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  139. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  140. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  141. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  142. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  143. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  144. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/upload.py +0 -0
  145. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  146. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_core.py +0 -0
  147. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  148. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  149. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  150. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  151. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  152. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  153. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  154. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  155. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  156. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  157. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  158. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/comms_v4.py +0 -0
  159. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  160. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  161. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  162. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  163. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  164. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  165. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  166. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  167. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  168. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  169. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  170. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  171. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  172. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  173. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  174. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  175. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  176. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  177. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  178. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  179. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  180. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  181. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  182. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  183. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  184. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  185. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  186. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  187. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_core.py +0 -0
  188. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  189. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  190. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  191. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  192. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  193. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  194. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  195. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  196. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  197. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  198. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  199. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/SOURCES.txt +0 -0
  200. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/dependency_links.txt +0 -0
  201. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/entry_points.txt +0 -0
  202. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/requires.txt +0 -0
  203. {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/top_level.txt +0 -0
  204. {meshcode-2.11.79 → meshcode-2.11.81}/setup.cfg +0 -0
  205. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_auto_update_hardening.py +0 -0
  206. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_closegap_1.py +0 -0
  207. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_closegap_2.py +0 -0
  208. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_closegap_3.py +0 -0
  209. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_prompt_inject.py +0 -0
  210. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_boot_bug_regression.py +0 -0
  211. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_color_truecolor.py +0 -0
  212. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_core.py +0 -0
  213. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_cross_agent_messaging.py +0 -0
  214. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_date_parse.py +0 -0
  215. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_doctor.py +0 -0
  216. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_epistemic_v1_python_sdk.py +0 -0
  217. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  218. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_esc_deaf_state.py +0 -0
  219. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_exceptions.py +0 -0
  220. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_file_upload.py +0 -0
  221. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_init_device_code.py +0 -0
  222. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_install_guard.py +0 -0
  223. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_lease_sigterm_release.py +0 -0
  224. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_mark_read_batch.py +0 -0
  225. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_marketplace_ratings.py +0 -0
  226. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_migration_integrity.py +0 -0
  227. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_realtime_event_freshness.py +0 -0
  228. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_rls_cross_tenant.py +0 -0
  229. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_rpc_grants.py +0 -0
  230. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_rpc_migrations.py +0 -0
  231. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_run_agent_dry_run.py +0 -0
  232. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_run_agent_no_server_import.py +0 -0
  233. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_security_regressions.py +0 -0
  234. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_self_update_user_site.py +0 -0
  235. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_sentinel.py +0 -0
  236. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_setup_path.py +0 -0
  237. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_sleep_signals.py +0 -0
  238. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_status_enum_coverage.py +0 -0
  239. {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_stay_on_loop_hook.py +0 -0
  240. {meshcode-2.11.79 → meshcode-2.11.81}/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.79
3
+ Version: 2.11.81
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.79"
2
+ __version__ = "2.11.81"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -321,6 +321,16 @@ def _do_respawns(api_key: str, host_id: str) -> int:
321
321
  # The old mc_set_desired_state(p_state=crashed) call passed NO agent id = no-op; dropped.
322
322
  if rec and rec.get("give_up"):
323
323
  _log(f"ALERT {proj}/{agent}: respawn cap hit — marked crashed (atomic). No more respawns.")
324
+ # task 843f282c Phase 2: an agent that spawned but NEVER came online (hit the cap) is
325
+ # almost always Claude Code not logged in (hangs on an invisible headless login prompt).
326
+ # Resolve the pending launch -> FE toast instead of an eternal spinner.
327
+ try:
328
+ _rpc("mc_resolve_launch", {
329
+ "p_api_key": api_key, "p_project_id": c.get("project_id"), "p_agent": agent,
330
+ "p_status": "failed", "p_reason": "spawn_failed",
331
+ "p_detail": "agent spawned but never connected — check Claude Code login (run `claude`)"})
332
+ except Exception:
333
+ pass
324
334
  n += 1
325
335
  return n
326
336
 
@@ -631,6 +641,32 @@ def _hostd_uninstall() -> int:
631
641
  return 0
632
642
 
633
643
 
644
+ _BOOTSTRAP_MARKER = STATE_DIR / ".bootstrap_check"
645
+
646
+
647
+ def _hostd_bootstrap_if_needed(ttl_sec: int = 3600, verbose: bool = False) -> bool:
648
+ """TTL-guarded bootstrap for the `meshcode run` / MCP-serve entry points (task 61b22c7b Phase 1):
649
+ bootstrap hostd if it wasn't checked within ttl_sec — covers users who run an agent BEFORE/without
650
+ `meshcode login`. The TTL avoids hammering schtasks/launchctl on every agent spawn (hostd spawns N
651
+ agents; only the first bootstraps). Best-effort: never raises."""
652
+ try:
653
+ if _BOOTSTRAP_MARKER.exists() and (time.time() - _BOOTSTRAP_MARKER.stat().st_mtime) < ttl_sec:
654
+ return False # recently bootstrapped — skip
655
+ except Exception:
656
+ pass
657
+ ok = False
658
+ try:
659
+ ok = _hostd_bootstrap(verbose=verbose)
660
+ except Exception:
661
+ pass
662
+ try:
663
+ STATE_DIR.mkdir(parents=True, exist_ok=True)
664
+ _BOOTSTRAP_MARKER.write_text(str(int(time.time())), encoding="utf-8")
665
+ except Exception:
666
+ pass
667
+ return ok
668
+
669
+
634
670
  def _hostd_bootstrap(verbose: bool = False) -> bool:
635
671
  """Idempotent auto-install + start of hostd (task f12b9d36) — called from `meshcode login`
636
672
  so onboarding is just `pip install meshcode` + `meshcode login` (no manual `hostd install`).
@@ -7406,6 +7406,20 @@ def _check_boot_version_drift():
7406
7406
  def run_server():
7407
7407
  """Start the MCP server on stdio (default for Claude Code)."""
7408
7408
  _auto_update()
7409
+ # task 61b22c7b Phase 1: best-effort, NON-blocking — ensure a hostd is running even if this
7410
+ # agent's MCP serve came up without a prior `meshcode login`/hostd. TTL-guarded + idempotent;
7411
+ # runs in a daemon thread so it never delays the MCP handshake.
7412
+ try:
7413
+ import threading as _th_bs
7414
+ def _bg_hostd_bootstrap():
7415
+ try:
7416
+ from meshcode import hostd as _hostd_bs
7417
+ _hostd_bs._hostd_bootstrap_if_needed()
7418
+ except Exception:
7419
+ pass
7420
+ _th_bs.Thread(target=_bg_hostd_bootstrap, daemon=True).start()
7421
+ except Exception:
7422
+ pass
7409
7423
  # Telemetry canary: surface any installed/loaded version drift loudly
7410
7424
  # to stderr so it shows up in Claude Code's MCP server output. The first
7411
7425
  # heartbeat carries the loaded version to mc_agents; this stderr line is
@@ -708,6 +708,13 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
708
708
  self_update.check_and_maybe_update()
709
709
  except Exception:
710
710
  pass
711
+ # task 61b22c7b Phase 1: ensure a hostd is running even if the user ran an agent BEFORE
712
+ # (or without) `meshcode login` — idempotent + TTL-guarded so spawned agents don't hammer it.
713
+ try:
714
+ from . import hostd as _hostd
715
+ _hostd._hostd_bootstrap_if_needed()
716
+ except Exception:
717
+ pass
711
718
 
712
719
  # Detect: are we already inside a Claude Code session? os.execvp(claude)
713
720
  # from inside an existing claude won't work — claude needs a fresh
@@ -1082,6 +1089,16 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
1082
1089
  os.execvp(cmd[0], cmd)
1083
1090
  except FileNotFoundError:
1084
1091
  print(f"[meshcode] ERROR: '{editor}' not found in PATH", file=sys.stderr)
1092
+ # task 843f282c Phase 2: tell the dashboard WHY (claude_not_installed) so the pending launch
1093
+ # toast fires with an actionable message instead of spinning forever. Best-effort.
1094
+ try:
1095
+ from .comms_v4 import sb_rpc as _rpc_resolve
1096
+ _rpc_resolve("mc_resolve_launch", {
1097
+ "p_api_key": api_key, "p_project_id": project_id, "p_agent": agent,
1098
+ "p_status": "failed", "p_reason": "claude_not_installed",
1099
+ "p_detail": f"'{editor}' not found in PATH — install: npm i -g @anthropic-ai/claude-code"})
1100
+ except Exception:
1101
+ pass
1085
1102
  return 127
1086
1103
  except Exception as e:
1087
1104
  print(f"[meshcode] ERROR launching {editor}: {e}", file=sys.stderr)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.79
3
+ Version: 2.11.81
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.79"
7
+ version = "2.11.81"
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