meshcode 2.11.74__tar.gz → 2.11.76__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 (268) hide show
  1. {meshcode-2.11.74 → meshcode-2.11.76}/PKG-INFO +1 -1
  2. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/comms_v4.py +10 -0
  4. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/hostd.py +114 -12
  5. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/run_agent.py +6 -5
  6. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode.egg-info/PKG-INFO +1 -1
  7. meshcode-2.11.74/meshcode.egg-info/SOURCES 2.txt → meshcode-2.11.76/meshcode.egg-info/SOURCES.txt +0 -12
  8. {meshcode-2.11.74 → meshcode-2.11.76}/pyproject.toml +1 -1
  9. meshcode-2.11.74/meshcode/hostd 3.py +0 -509
  10. meshcode-2.11.74/meshcode.egg-info/PKG-INFO 2 +0 -452
  11. meshcode-2.11.74/meshcode.egg-info/SOURCES.txt +0 -266
  12. meshcode-2.11.74/meshcode.egg-info/dependency_links 2.txt +0 -1
  13. meshcode-2.11.74/meshcode.egg-info/entry_points 2.txt +0 -3
  14. meshcode-2.11.74/meshcode.egg-info/requires 2.txt +0 -13
  15. meshcode-2.11.74/meshcode.egg-info/top_level 2.txt +0 -4
  16. meshcode-2.11.74/tests/test_autonomous_prompt_inject 10.py +0 -126
  17. meshcode-2.11.74/tests/test_autonomous_prompt_inject 11.py +0 -126
  18. meshcode-2.11.74/tests/test_autonomous_prompt_inject 12.py +0 -126
  19. meshcode-2.11.74/tests/test_autonomous_prompt_inject 13.py +0 -126
  20. meshcode-2.11.74/tests/test_autonomous_prompt_inject 14.py +0 -126
  21. meshcode-2.11.74/tests/test_autonomous_prompt_inject 15.py +0 -126
  22. meshcode-2.11.74/tests/test_autonomous_prompt_inject 16.py +0 -126
  23. meshcode-2.11.74/tests/test_autonomous_prompt_inject 17.py +0 -126
  24. meshcode-2.11.74/tests/test_autonomous_prompt_inject 18.py +0 -126
  25. meshcode-2.11.74/tests/test_autonomous_prompt_inject 19.py +0 -126
  26. meshcode-2.11.74/tests/test_autonomous_prompt_inject 2.py +0 -126
  27. meshcode-2.11.74/tests/test_autonomous_prompt_inject 20.py +0 -126
  28. meshcode-2.11.74/tests/test_autonomous_prompt_inject 21.py +0 -126
  29. meshcode-2.11.74/tests/test_autonomous_prompt_inject 22.py +0 -126
  30. meshcode-2.11.74/tests/test_autonomous_prompt_inject 3.py +0 -126
  31. meshcode-2.11.74/tests/test_autonomous_prompt_inject 4.py +0 -126
  32. meshcode-2.11.74/tests/test_autonomous_prompt_inject 5.py +0 -126
  33. meshcode-2.11.74/tests/test_autonomous_prompt_inject 6.py +0 -126
  34. meshcode-2.11.74/tests/test_autonomous_prompt_inject 7.py +0 -126
  35. meshcode-2.11.74/tests/test_autonomous_prompt_inject 8.py +0 -126
  36. meshcode-2.11.74/tests/test_autonomous_prompt_inject 9.py +0 -126
  37. {meshcode-2.11.74 → meshcode-2.11.76}/README.md +0 -0
  38. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/__main__.py +0 -0
  39. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/_stop_hook_template.py +0 -0
  40. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/ascii_art.py +0 -0
  41. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/atomic_push.py +0 -0
  42. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/claude_update.py +0 -0
  43. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/cli.py +0 -0
  44. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/compat.py +0 -0
  45. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/daemon.py +0 -0
  46. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/date_parse.py +0 -0
  47. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/doctor.py +0 -0
  48. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/error_hints.py +0 -0
  49. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/exceptions.py +0 -0
  50. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/invites.py +0 -0
  51. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/launcher.py +0 -0
  52. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/launcher_install.py +0 -0
  53. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/__init__.py +0 -0
  54. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/__main__.py +0 -0
  55. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/backend.py +0 -0
  56. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/realtime.py +0 -0
  57. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/server.py +0 -0
  58. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  59. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/test_backend.py +0 -0
  60. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  61. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  62. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  63. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  64. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  65. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/preferences.py +0 -0
  66. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/protocol_handler.py +0 -0
  67. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/protocol_v2.py +0 -0
  68. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/quickstart.py +0 -0
  69. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/rpc_allowlist.py +0 -0
  70. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/scripts/check_secrets.py +0 -0
  71. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/scripts/race_rate_harness.py +0 -0
  72. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/secrets.py +0 -0
  73. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/self_update.py +0 -0
  74. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/setup_clients.py +0 -0
  75. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/supervisor.py +0 -0
  76. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/up.py +0 -0
  77. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode/upload.py +0 -0
  78. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/comms_v4.py +0 -0
  79. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  80. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  81. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/cli.py +0 -0
  82. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  83. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/compat.py +0 -0
  84. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  85. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  86. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/invites.py +0 -0
  87. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  88. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  89. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  90. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  91. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  92. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  93. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  94. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  95. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  96. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  97. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  98. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  99. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  100. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  101. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  102. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  103. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  104. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  105. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/meshcode/upload.py +0 -0
  106. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  107. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_core.py +0 -0
  108. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  109. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  110. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  111. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  112. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  113. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  114. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  115. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  116. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  117. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  118. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  119. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  120. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  121. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  122. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  123. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  124. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  125. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  126. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  127. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  128. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  129. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  130. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  131. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  132. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  133. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  134. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  135. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  136. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  137. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  138. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  139. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  140. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  141. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  142. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  143. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  144. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  145. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  146. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/comms_v4.py +0 -0
  147. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  148. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  149. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/cli.py +0 -0
  150. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  151. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/compat.py +0 -0
  152. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  153. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  154. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/invites.py +0 -0
  155. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  156. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  157. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  158. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  159. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  160. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  161. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  162. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  163. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  164. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  165. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  166. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  167. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  168. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  169. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  170. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  171. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  172. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  173. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/meshcode/upload.py +0 -0
  174. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  175. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_core.py +0 -0
  176. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  177. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  178. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  179. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  180. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  181. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  182. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  183. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  184. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  185. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  186. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  187. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/comms_v4.py +0 -0
  188. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  189. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  190. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  191. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  192. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  193. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  194. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  195. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  196. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  197. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  198. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  199. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  200. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  201. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  202. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  203. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  204. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  205. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  206. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  207. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  208. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  209. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  210. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  211. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  212. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  213. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  214. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  215. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  216. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_core.py +0 -0
  217. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  218. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  219. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  220. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  221. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  222. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  223. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  224. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  225. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  226. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  227. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  228. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode.egg-info/dependency_links.txt +0 -0
  229. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode.egg-info/entry_points.txt +0 -0
  230. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode.egg-info/requires.txt +0 -0
  231. {meshcode-2.11.74 → meshcode-2.11.76}/meshcode.egg-info/top_level.txt +0 -0
  232. {meshcode-2.11.74 → meshcode-2.11.76}/setup.cfg +0 -0
  233. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_auto_update_hardening.py +0 -0
  234. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_autonomous_closegap_1.py +0 -0
  235. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_autonomous_closegap_2.py +0 -0
  236. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_autonomous_closegap_3.py +0 -0
  237. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_autonomous_prompt_inject.py +0 -0
  238. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_boot_bug_regression.py +0 -0
  239. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_color_truecolor.py +0 -0
  240. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_core.py +0 -0
  241. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_cross_agent_messaging.py +0 -0
  242. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_date_parse.py +0 -0
  243. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_doctor.py +0 -0
  244. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_epistemic_v1_python_sdk.py +0 -0
  245. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  246. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_esc_deaf_state.py +0 -0
  247. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_exceptions.py +0 -0
  248. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_file_upload.py +0 -0
  249. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_init_device_code.py +0 -0
  250. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_install_guard.py +0 -0
  251. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_lease_sigterm_release.py +0 -0
  252. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_mark_read_batch.py +0 -0
  253. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_marketplace_ratings.py +0 -0
  254. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_migration_integrity.py +0 -0
  255. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_realtime_event_freshness.py +0 -0
  256. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_rls_cross_tenant.py +0 -0
  257. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_rpc_grants.py +0 -0
  258. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_rpc_migrations.py +0 -0
  259. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_run_agent_dry_run.py +0 -0
  260. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_run_agent_no_server_import.py +0 -0
  261. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_security_regressions.py +0 -0
  262. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_self_update_user_site.py +0 -0
  263. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_sentinel.py +0 -0
  264. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_setup_path.py +0 -0
  265. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_sleep_signals.py +0 -0
  266. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_status_enum_coverage.py +0 -0
  267. {meshcode-2.11.74 → meshcode-2.11.76}/tests/test_stay_on_loop_hook.py +0 -0
  268. {meshcode-2.11.74 → meshcode-2.11.76}/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.74
3
+ Version: 2.11.76
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.74"
2
+ __version__ = "2.11.76"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -2388,6 +2388,16 @@ def login(api_key):
2388
2388
  backend = secrets_mod.keyring_status().get("backend", "?")
2389
2389
  print(f"[meshcode] Authenticated as {result['display_name']} ({result['email']})")
2390
2390
  print(f"[meshcode] API key stored in OS keychain ({backend})")
2391
+
2392
+ # ZERO-SETUP (task f12b9d36): auto-bootstrap hostd so Launch works with no manual
2393
+ # `meshcode hostd install`. Idempotent + cross-platform + best-effort (never breaks login).
2394
+ try:
2395
+ import importlib as _il
2396
+ _hd = _il.import_module("meshcode.hostd")
2397
+ _hd._hostd_bootstrap(verbose=True)
2398
+ except Exception:
2399
+ pass
2400
+
2391
2401
  return True
2392
2402
 
2393
2403
 
@@ -35,6 +35,7 @@ from __future__ import annotations
35
35
  import json
36
36
  import os
37
37
  import shlex
38
+ import shutil
38
39
  import subprocess
39
40
  import sys
40
41
  import time
@@ -211,10 +212,13 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
211
212
  # background, NO terminal — UNIVERSAL macOS/Linux/Windows (task c1a6c6a8, mesh-dev specs).
212
213
  # Clean env (a stale CLAUDECODE aborts `meshcode run`); keep crash logs in a per-agent logfile
213
214
  # (NOT DEVNULL — we want to debug headless agents that die on boot).
215
+ # task 14782bb4: spawned agents DO auto-update (non-blocking) — strip any inherited
216
+ # NO_*UPDATE so the agent's launch runs the bg updater (the daemon launcher stays disabled).
217
+ # No hang: run_agent now uses the NON-blocking updater + we spawn via `python -m meshcode`
218
+ # (not the .exe shim) so a bg `pip install -U` can replace meshcode.exe on Windows.
214
219
  env = {k: v for k, v in os.environ.items()
215
- if k not in ("CLAUDECODE", "CLAUDE_CODE_SESSION")}
216
- env["MESHCODE_NO_AUTO_UPDATE"] = "1"
217
- env["MESHCODE_NO_UPDATE"] = "1" # belt-and-suspenders: var honored pre-2.11.74 (no launch-hang)
220
+ if k not in ("CLAUDECODE", "CLAUDE_CODE_SESSION",
221
+ "MESHCODE_NO_UPDATE", "MESHCODE_NO_AUTO_UPDATE")}
218
222
  log_dir = STATE_DIR / "logs"
219
223
  try:
220
224
  log_dir.mkdir(parents=True, exist_ok=True)
@@ -235,11 +239,11 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
235
239
  }
236
240
  if sys.platform == "win32":
237
241
  # CREATE_NO_WINDOW (0x08000000) | DETACHED_PROCESS (0x08): no console window, fully
238
- # detached from this daemon. Use the console entry-point (meshcode.exe), NEVER pythonw
239
- # (it swallows stderr). Ensure venv Scripts + System32 on PATH (Windows PATH cap ~32k).
242
+ # detached from this daemon. NEVER pythonw (swallows stderr). Ensure venv Scripts +
243
+ # System32 on PATH (Windows PATH cap ~32k).
240
244
  kwargs["creationflags"] = 0x08000000 | 0x00000008
241
245
  try:
242
- scripts = str(Path(bin_).resolve().parent)
246
+ scripts = str(Path(sys.executable).resolve().parent) # venv Scripts dir
243
247
  except Exception:
244
248
  scripts = ""
245
249
  sysroot = os.environ.get("SystemRoot", r"C:\Windows")
@@ -249,7 +253,9 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
249
253
  # POSIX: detach into its own session so it survives the daemon + has no controlling tty.
250
254
  kwargs["start_new_session"] = True
251
255
  try:
252
- subprocess.Popen([bin_, "run", target], **kwargs)
256
+ # `python -m meshcode` (NOT the meshcode.exe shim) so the .exe isn't held open by the
257
+ # agent -> a background `pip install -U` can replace it on Windows (task 14782bb4 #4).
258
+ subprocess.Popen([sys.executable, "-m", "meshcode", "run", target], **kwargs)
253
259
  _log(f"spawned {target} HEADLESS (no window, {sys.platform}; log={log_path})")
254
260
  return True
255
261
  except Exception as e:
@@ -266,13 +272,15 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
266
272
  # command PER-PLATFORM (mesh-core FIX1, 0x80070002): cmd.exe uses & (NOT ';'), set "V=" to clear
267
273
  # (NOT bash unset/export), double-quotes (NOT shlex POSIX), no exec — else Windows Terminal splits
268
274
  # on ';' -> file-not-found. Layered ON TOP of the 2.11.72 headless-flags fix (visible branch only).
275
+ # task 14782bb4: CLEAR any inherited NO_*UPDATE (so the agent auto-updates non-blocking) and run
276
+ # via `python -m meshcode` (NOT the .exe shim) so a bg `pip install -U` can replace meshcode.exe.
269
277
  if sys.platform == "win32":
270
278
  cmd = (f'set "CLAUDECODE=" & set "CLAUDE_CODE_SESSION=" & '
271
- f'set "MESHCODE_NO_AUTO_UPDATE=1" & set "MESHCODE_NO_UPDATE=1" & '
272
- f'"{bin_}" run "{target}"')
279
+ f'set "MESHCODE_NO_UPDATE=" & set "MESHCODE_NO_AUTO_UPDATE=" & '
280
+ f'"{sys.executable}" -m meshcode run "{target}"')
273
281
  else:
274
- cmd = (f"unset CLAUDECODE CLAUDE_CODE_SESSION; export MESHCODE_NO_AUTO_UPDATE=1; "
275
- f"export MESHCODE_NO_UPDATE=1; exec {shlex.quote(bin_)} run {shlex.quote(target)}")
282
+ cmd = (f"unset CLAUDECODE CLAUDE_CODE_SESSION MESHCODE_NO_UPDATE MESHCODE_NO_AUTO_UPDATE; "
283
+ f"exec {shlex.quote(sys.executable)} -m meshcode run {shlex.quote(target)}")
276
284
  try:
277
285
  from meshcode import protocol_handler as _ph
278
286
  ok, info = _ph._spawn_terminal(cmd)
@@ -485,12 +493,64 @@ def _hostd_install_windows() -> int:
485
493
  return 0
486
494
 
487
495
 
496
+ _HOSTD_SYSTEMD_UNIT = "meshcode-hostd.service"
497
+
498
+
499
+ def _hostd_run_argv() -> list:
500
+ """Argv that runs `meshcode hostd run`, resolving the installed console script or
501
+ falling back to `python -m meshcode`."""
502
+ mc = shutil.which("meshcode")
503
+ if mc:
504
+ return [mc, "hostd", "run"]
505
+ return [sys.executable, "-m", "meshcode", "hostd", "run"]
506
+
507
+
508
+ def _hostd_install_linux() -> int:
509
+ """Linux (task f12b9d36): systemd --user unit (durable, auto-restart, survives logout-login)
510
+ with nohup fallback when systemd --user isn't usable (no session bus / container)."""
511
+ (STATE_DIR / "logs").mkdir(parents=True, exist_ok=True)
512
+ argv = _hostd_run_argv()
513
+ execstart = " ".join(shlex.quote(a) for a in argv)
514
+ if shutil.which("systemctl"):
515
+ unit_dir = Path.home() / ".config" / "systemd" / "user"
516
+ unit_dir.mkdir(parents=True, exist_ok=True)
517
+ (unit_dir / _HOSTD_SYSTEMD_UNIT).write_text(
518
+ "[Unit]\nDescription=MeshCode hostd\nAfter=default.target\n\n"
519
+ "[Service]\nType=simple\n"
520
+ "Environment=MESHCODE_NO_UPDATE=1\nEnvironment=MESHCODE_NO_AUTO_UPDATE=1\n"
521
+ "Environment=MESHCODE_HOSTD_POLL_SEC=10\n"
522
+ f"ExecStart={execstart}\nRestart=on-failure\nRestartSec=10\n\n"
523
+ "[Install]\nWantedBy=default.target\n",
524
+ encoding="utf-8",
525
+ )
526
+ subprocess.run(["systemctl", "--user", "daemon-reload"], capture_output=True, text=True)
527
+ r = subprocess.run(["systemctl", "--user", "enable", "--now", _HOSTD_SYSTEMD_UNIT],
528
+ capture_output=True, text=True)
529
+ if r.returncode == 0:
530
+ print(f"[hostd] installed systemd --user unit '{_HOSTD_SYSTEMD_UNIT}' (enabled + started)")
531
+ return 0
532
+ _log(f"systemd --user enable failed ({r.stderr.strip()}); falling back to nohup")
533
+ # nohup fallback: starts now (host registers); not reboot-persistent.
534
+ env = {**os.environ, "MESHCODE_NO_UPDATE": "1", "MESHCODE_NO_AUTO_UPDATE": "1",
535
+ "MESHCODE_HOSTD_POLL_SEC": "10"}
536
+ try:
537
+ logf = open(STATE_DIR / "logs" / "hostd.stdout.log", "ab")
538
+ except Exception:
539
+ logf = subprocess.DEVNULL
540
+ subprocess.Popen(argv, stdout=logf, stderr=subprocess.STDOUT, stdin=subprocess.DEVNULL,
541
+ start_new_session=True, env=env)
542
+ print("[hostd] started via nohup (no systemd --user available; not reboot-persistent)")
543
+ return 0
544
+
545
+
488
546
  def _hostd_install() -> int:
489
547
  import platform
490
548
  if platform.system() == "Windows":
491
549
  return _hostd_install_windows()
550
+ if platform.system() == "Linux":
551
+ return _hostd_install_linux()
492
552
  if platform.system() != "Darwin":
493
- print("[hostd] launchd install is macOS only (Linux: use systemd --user; or run `meshcode hostd run` under your own supervisor).", file=sys.stderr)
553
+ print("[hostd] unsupported platform; run `meshcode hostd run` under your own supervisor.", file=sys.stderr)
494
554
  return 2
495
555
  plist = _hostd_plist_path()
496
556
  plist.parent.mkdir(parents=True, exist_ok=True)
@@ -524,6 +584,48 @@ def _hostd_uninstall() -> int:
524
584
  return 0
525
585
 
526
586
 
587
+ def _hostd_bootstrap(verbose: bool = False) -> bool:
588
+ """Idempotent auto-install + start of hostd (task f12b9d36) — called from `meshcode login`
589
+ so onboarding is just `pip install meshcode` + `meshcode login` (no manual `hostd install`).
590
+ If the OS job already exists, just ensure it's running (don't bounce a live daemon); else
591
+ install + start. Best-effort: NEVER raises — login must not fail on a bootstrap hiccup."""
592
+ import platform
593
+ try:
594
+ sysname = platform.system()
595
+ if sysname == "Darwin":
596
+ if not _hostd_plist_path().exists():
597
+ _hostd_install() # writes plist + launchctl load
598
+ try:
599
+ uid = str(os.getuid())
600
+ subprocess.run(["launchctl", "kickstart", f"gui/{uid}/{_HOSTD_PLIST_LABEL}"],
601
+ capture_output=True, text=True) # start if not already running
602
+ except Exception:
603
+ pass
604
+ elif sysname == "Windows":
605
+ q = subprocess.run(["schtasks", "/Query", "/TN", _HOSTD_TASK_NAME],
606
+ capture_output=True, text=True)
607
+ if q.returncode != 0:
608
+ _hostd_install_windows()
609
+ subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME],
610
+ capture_output=True, text=True) # harmless if already running
611
+ else: # Linux + others
612
+ if shutil.which("systemctl"):
613
+ act = subprocess.run(["systemctl", "--user", "is-active", _HOSTD_SYSTEMD_UNIT],
614
+ capture_output=True, text=True)
615
+ if act.stdout.strip() == "active":
616
+ return True # already running — no-op
617
+ _hostd_install_linux() # systemd enable --now, or nohup fallback
618
+ if verbose:
619
+ print("[meshcode] hostd bootstrapped — Launch is ready (no manual setup needed).")
620
+ return True
621
+ except Exception as e:
622
+ try:
623
+ _log(f"hostd bootstrap skipped: {e}")
624
+ except Exception:
625
+ pass
626
+ return False
627
+
628
+
527
629
  def cmd_hostd(args: list) -> int:
528
630
  """Entry point for `meshcode hostd ...`."""
529
631
  if not args or args[0] in ("-h", "--help"):
@@ -698,13 +698,14 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
698
698
  # Propagate autonomous flag to the editor + MCP child via env var.
699
699
  if autonomous:
700
700
  os.environ["MESHCODE_AUTONOMOUS"] = "1"
701
- # Blocking self-update: pip install -U meshcode BEFORE spawning the
702
- # editor so the child MCP subprocess loads the freshest server.py off
703
- # disk. Skip in dry-run CI / pre-publish smokes must not fork pip.
704
- # See claude_update_blocking below for the npm/Claude Code half.
701
+ # NON-BLOCKING self-update (task 14782bb4): kick a detached background `pip install -U meshcode`
702
+ # and return IMMEDIATELY — the launch NEVER waits/hangs (Samuel req; the old blocking variant hung
703
+ # every Windows launch on WinError 32). This launch runs the current version; the next spawn/recycle
704
+ # picks up the new one (two-launch async). Skip in dry-run (CI/pre-publish smokes must not fork pip).
705
+ # Fully opt-out via MESHCODE_NO_UPDATE / MESHCODE_NO_AUTO_UPDATE (handled inside check_and_maybe_update).
705
706
  if not dry_run:
706
707
  try:
707
- self_update.check_and_maybe_update_blocking()
708
+ self_update.check_and_maybe_update()
708
709
  except Exception:
709
710
  pass
710
711
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.74
3
+ Version: 2.11.76
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -5,9 +5,6 @@ meshcode/__main__.py
5
5
  meshcode/_stop_hook_template.py
6
6
  meshcode/ascii_art.py
7
7
  meshcode/atomic_push.py
8
- meshcode/claude_update 2.py
9
- meshcode/claude_update 3.py
10
- meshcode/claude_update 4.py
11
8
  meshcode/claude_update.py
12
9
  meshcode/cli.py
13
10
  meshcode/comms_v4.py
@@ -17,9 +14,6 @@ meshcode/date_parse.py
17
14
  meshcode/doctor.py
18
15
  meshcode/error_hints.py
19
16
  meshcode/exceptions.py
20
- meshcode/hostd 2.py
21
- meshcode/hostd 3.py
22
- meshcode/hostd 4.py
23
17
  meshcode/hostd.py
24
18
  meshcode/invites.py
25
19
  meshcode/launcher.py
@@ -34,8 +28,6 @@ meshcode/secrets.py
34
28
  meshcode/self_update.py
35
29
  meshcode/setup_clients.py
36
30
  meshcode/supervisor.py
37
- meshcode/up 2.py
38
- meshcode/up 3.py
39
31
  meshcode/up.py
40
32
  meshcode/upload.py
41
33
  meshcode-backend-wt/comms_v4.py
@@ -212,10 +204,6 @@ tests/test_auto_update_hardening.py
212
204
  tests/test_autonomous_closegap_1.py
213
205
  tests/test_autonomous_closegap_2.py
214
206
  tests/test_autonomous_closegap_3.py
215
- tests/test_autonomous_prompt_inject 2.py
216
- tests/test_autonomous_prompt_inject 3.py
217
- tests/test_autonomous_prompt_inject 4.py
218
- tests/test_autonomous_prompt_inject 5.py
219
207
  tests/test_autonomous_prompt_inject.py
220
208
  tests/test_boot_bug_regression.py
221
209
  tests/test_color_truecolor.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meshcode"
7
- version = "2.11.74"
7
+ version = "2.11.76"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}