meshcode 2.11.75__tar.gz → 2.11.77__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.75 → meshcode-2.11.77}/PKG-INFO +1 -1
  2. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/hostd.py +72 -13
  4. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/run_agent.py +6 -5
  5. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/PKG-INFO +1 -1
  6. meshcode-2.11.75/meshcode.egg-info/SOURCES 2.txt → meshcode-2.11.77/meshcode.egg-info/SOURCES.txt +0 -12
  7. {meshcode-2.11.75 → meshcode-2.11.77}/pyproject.toml +1 -1
  8. meshcode-2.11.75/meshcode/hostd 3.py +0 -509
  9. meshcode-2.11.75/meshcode.egg-info/PKG-INFO 2 +0 -452
  10. meshcode-2.11.75/meshcode.egg-info/SOURCES.txt +0 -266
  11. meshcode-2.11.75/meshcode.egg-info/dependency_links 2.txt +0 -1
  12. meshcode-2.11.75/meshcode.egg-info/entry_points 2.txt +0 -3
  13. meshcode-2.11.75/meshcode.egg-info/requires 2.txt +0 -13
  14. meshcode-2.11.75/meshcode.egg-info/top_level 2.txt +0 -4
  15. meshcode-2.11.75/tests/test_autonomous_prompt_inject 10.py +0 -126
  16. meshcode-2.11.75/tests/test_autonomous_prompt_inject 11.py +0 -126
  17. meshcode-2.11.75/tests/test_autonomous_prompt_inject 12.py +0 -126
  18. meshcode-2.11.75/tests/test_autonomous_prompt_inject 13.py +0 -126
  19. meshcode-2.11.75/tests/test_autonomous_prompt_inject 14.py +0 -126
  20. meshcode-2.11.75/tests/test_autonomous_prompt_inject 15.py +0 -126
  21. meshcode-2.11.75/tests/test_autonomous_prompt_inject 16.py +0 -126
  22. meshcode-2.11.75/tests/test_autonomous_prompt_inject 17.py +0 -126
  23. meshcode-2.11.75/tests/test_autonomous_prompt_inject 18.py +0 -126
  24. meshcode-2.11.75/tests/test_autonomous_prompt_inject 19.py +0 -126
  25. meshcode-2.11.75/tests/test_autonomous_prompt_inject 2.py +0 -126
  26. meshcode-2.11.75/tests/test_autonomous_prompt_inject 20.py +0 -126
  27. meshcode-2.11.75/tests/test_autonomous_prompt_inject 21.py +0 -126
  28. meshcode-2.11.75/tests/test_autonomous_prompt_inject 22.py +0 -126
  29. meshcode-2.11.75/tests/test_autonomous_prompt_inject 3.py +0 -126
  30. meshcode-2.11.75/tests/test_autonomous_prompt_inject 4.py +0 -126
  31. meshcode-2.11.75/tests/test_autonomous_prompt_inject 5.py +0 -126
  32. meshcode-2.11.75/tests/test_autonomous_prompt_inject 6.py +0 -126
  33. meshcode-2.11.75/tests/test_autonomous_prompt_inject 7.py +0 -126
  34. meshcode-2.11.75/tests/test_autonomous_prompt_inject 8.py +0 -126
  35. meshcode-2.11.75/tests/test_autonomous_prompt_inject 9.py +0 -126
  36. {meshcode-2.11.75 → meshcode-2.11.77}/README.md +0 -0
  37. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/__main__.py +0 -0
  38. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/_stop_hook_template.py +0 -0
  39. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/ascii_art.py +0 -0
  40. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/atomic_push.py +0 -0
  41. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/claude_update.py +0 -0
  42. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/cli.py +0 -0
  43. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/comms_v4.py +0 -0
  44. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/compat.py +0 -0
  45. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/daemon.py +0 -0
  46. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/date_parse.py +0 -0
  47. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/doctor.py +0 -0
  48. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/error_hints.py +0 -0
  49. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/exceptions.py +0 -0
  50. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/invites.py +0 -0
  51. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/launcher.py +0 -0
  52. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/launcher_install.py +0 -0
  53. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/__init__.py +0 -0
  54. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/__main__.py +0 -0
  55. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/backend.py +0 -0
  56. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/realtime.py +0 -0
  57. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/server.py +0 -0
  58. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  59. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_backend.py +0 -0
  60. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  61. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  62. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  63. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  64. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  65. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/preferences.py +0 -0
  66. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/protocol_handler.py +0 -0
  67. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/protocol_v2.py +0 -0
  68. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/quickstart.py +0 -0
  69. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/rpc_allowlist.py +0 -0
  70. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/scripts/check_secrets.py +0 -0
  71. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/scripts/race_rate_harness.py +0 -0
  72. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/secrets.py +0 -0
  73. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/self_update.py +0 -0
  74. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/setup_clients.py +0 -0
  75. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/supervisor.py +0 -0
  76. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/up.py +0 -0
  77. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/upload.py +0 -0
  78. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/comms_v4.py +0 -0
  79. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  80. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  81. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/cli.py +0 -0
  82. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  83. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/compat.py +0 -0
  84. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  85. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  86. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/invites.py +0 -0
  87. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  88. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  89. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  90. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  91. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  92. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  93. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  94. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  95. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  96. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  97. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  98. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  99. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  100. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  101. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  102. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  103. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  104. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  105. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/upload.py +0 -0
  106. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  107. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_core.py +0 -0
  108. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  109. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  110. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  111. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  112. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  113. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  114. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  115. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  116. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  117. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  118. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  119. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  120. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  121. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  122. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  123. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  124. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  125. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  126. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  127. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  128. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  129. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  130. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  131. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  132. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  133. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  134. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  135. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  136. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  137. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  138. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  139. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  140. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  141. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  142. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  143. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  144. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  145. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  146. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/comms_v4.py +0 -0
  147. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  148. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  149. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/cli.py +0 -0
  150. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  151. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/compat.py +0 -0
  152. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  153. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  154. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/invites.py +0 -0
  155. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  156. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  157. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  158. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  159. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  160. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  161. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  162. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  163. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  164. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  165. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  166. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  167. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  168. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  169. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  170. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  171. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  172. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  173. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/upload.py +0 -0
  174. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  175. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_core.py +0 -0
  176. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  177. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  178. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  179. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  180. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  181. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  182. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  183. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  184. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  185. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  186. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  187. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/comms_v4.py +0 -0
  188. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  189. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  190. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  191. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  192. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  193. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  194. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  195. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  196. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  197. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  198. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  199. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  200. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  201. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  202. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  203. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  204. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  205. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  206. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  207. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  208. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  209. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  210. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  211. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  212. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  213. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  214. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  215. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  216. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_core.py +0 -0
  217. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  218. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  219. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  220. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  221. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  222. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  223. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  224. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  225. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  226. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  227. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  228. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/dependency_links.txt +0 -0
  229. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/entry_points.txt +0 -0
  230. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/requires.txt +0 -0
  231. {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/top_level.txt +0 -0
  232. {meshcode-2.11.75 → meshcode-2.11.77}/setup.cfg +0 -0
  233. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_auto_update_hardening.py +0 -0
  234. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_closegap_1.py +0 -0
  235. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_closegap_2.py +0 -0
  236. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_closegap_3.py +0 -0
  237. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_prompt_inject.py +0 -0
  238. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_boot_bug_regression.py +0 -0
  239. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_color_truecolor.py +0 -0
  240. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_core.py +0 -0
  241. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_cross_agent_messaging.py +0 -0
  242. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_date_parse.py +0 -0
  243. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_doctor.py +0 -0
  244. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_epistemic_v1_python_sdk.py +0 -0
  245. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  246. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_esc_deaf_state.py +0 -0
  247. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_exceptions.py +0 -0
  248. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_file_upload.py +0 -0
  249. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_init_device_code.py +0 -0
  250. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_install_guard.py +0 -0
  251. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_lease_sigterm_release.py +0 -0
  252. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_mark_read_batch.py +0 -0
  253. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_marketplace_ratings.py +0 -0
  254. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_migration_integrity.py +0 -0
  255. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_realtime_event_freshness.py +0 -0
  256. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_rls_cross_tenant.py +0 -0
  257. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_rpc_grants.py +0 -0
  258. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_rpc_migrations.py +0 -0
  259. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_run_agent_dry_run.py +0 -0
  260. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_run_agent_no_server_import.py +0 -0
  261. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_security_regressions.py +0 -0
  262. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_self_update_user_site.py +0 -0
  263. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_sentinel.py +0 -0
  264. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_setup_path.py +0 -0
  265. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_sleep_signals.py +0 -0
  266. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_status_enum_coverage.py +0 -0
  267. {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_stay_on_loop_hook.py +0 -0
  268. {meshcode-2.11.75 → meshcode-2.11.77}/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.75
3
+ Version: 2.11.77
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.75"
2
+ __version__ = "2.11.77"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -212,10 +212,13 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
212
212
  # background, NO terminal — UNIVERSAL macOS/Linux/Windows (task c1a6c6a8, mesh-dev specs).
213
213
  # Clean env (a stale CLAUDECODE aborts `meshcode run`); keep crash logs in a per-agent logfile
214
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.
215
219
  env = {k: v for k, v in os.environ.items()
216
- if k not in ("CLAUDECODE", "CLAUDE_CODE_SESSION")}
217
- env["MESHCODE_NO_AUTO_UPDATE"] = "1"
218
- 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")}
219
222
  log_dir = STATE_DIR / "logs"
220
223
  try:
221
224
  log_dir.mkdir(parents=True, exist_ok=True)
@@ -236,11 +239,11 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
236
239
  }
237
240
  if sys.platform == "win32":
238
241
  # CREATE_NO_WINDOW (0x08000000) | DETACHED_PROCESS (0x08): no console window, fully
239
- # detached from this daemon. Use the console entry-point (meshcode.exe), NEVER pythonw
240
- # (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).
241
244
  kwargs["creationflags"] = 0x08000000 | 0x00000008
242
245
  try:
243
- scripts = str(Path(bin_).resolve().parent)
246
+ scripts = str(Path(sys.executable).resolve().parent) # venv Scripts dir
244
247
  except Exception:
245
248
  scripts = ""
246
249
  sysroot = os.environ.get("SystemRoot", r"C:\Windows")
@@ -250,7 +253,9 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
250
253
  # POSIX: detach into its own session so it survives the daemon + has no controlling tty.
251
254
  kwargs["start_new_session"] = True
252
255
  try:
253
- 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)
254
259
  _log(f"spawned {target} HEADLESS (no window, {sys.platform}; log={log_path})")
255
260
  return True
256
261
  except Exception as e:
@@ -267,13 +272,15 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
267
272
  # command PER-PLATFORM (mesh-core FIX1, 0x80070002): cmd.exe uses & (NOT ';'), set "V=" to clear
268
273
  # (NOT bash unset/export), double-quotes (NOT shlex POSIX), no exec — else Windows Terminal splits
269
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.
270
277
  if sys.platform == "win32":
271
278
  cmd = (f'set "CLAUDECODE=" & set "CLAUDE_CODE_SESSION=" & '
272
- f'set "MESHCODE_NO_AUTO_UPDATE=1" & set "MESHCODE_NO_UPDATE=1" & '
273
- f'"{bin_}" run "{target}"')
279
+ f'set "MESHCODE_NO_UPDATE=" & set "MESHCODE_NO_AUTO_UPDATE=" & '
280
+ f'"{sys.executable}" -m meshcode run "{target}"')
274
281
  else:
275
- cmd = (f"unset CLAUDECODE CLAUDE_CODE_SESSION; export MESHCODE_NO_AUTO_UPDATE=1; "
276
- 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)}")
277
284
  try:
278
285
  from meshcode import protocol_handler as _ph
279
286
  ok, info = _ph._spawn_terminal(cmd)
@@ -619,6 +626,57 @@ def _hostd_bootstrap(verbose: bool = False) -> bool:
619
626
  return False
620
627
 
621
628
 
629
+ def _do_version_recycles(api_key: str, host_id: str) -> int:
630
+ """Recycle managed agents running an OLDER meshcode than what's installed on disk so they pick up
631
+ the auto-updated version (task 14782bb4 D). GRACIOUS (guardrail #5): idle-only (NEVER a BUSY agent /
632
+ mid-task), rate-limited (<=1 version-recycle per agent / 30min), recycle-not-kill (clean handoff via
633
+ mc_request_recycle -> agent exits at its boundary -> _do_respawns relaunches on the new version).
634
+ Recorded via mc_record_recycle (NEVER counts against the mig406 crash respawn cap). Owner-scoped."""
635
+ cfg = _rpc("mc_host_config_get", {"p_api_key": api_key, "p_host_id": host_id})
636
+ if not cfg or not cfg.get("ok"):
637
+ return 0
638
+ try:
639
+ from meshcode import self_update as _su
640
+ disk = _su._current_version()
641
+ except Exception:
642
+ return 0
643
+ if not disk:
644
+ return 0
645
+ st = _load_state()
646
+ now = time.time()
647
+ n = 0
648
+ for a in cfg.get("agents", []):
649
+ if a.get("desired_state") != "running":
650
+ continue
651
+ cv = a.get("cli_version")
652
+ if not cv:
653
+ continue
654
+ try:
655
+ if not _su._is_newer(disk, cv):
656
+ continue # agent already on the on-disk version (or newer) — nothing to do
657
+ except Exception:
658
+ continue
659
+ if (a.get("status") or "") in BUSY_STATUSES:
660
+ continue # safe-point ONLY — never recycle a working agent mid-task
661
+ proj, agent = a.get("project_name"), a.get("name")
662
+ if not proj or not agent:
663
+ continue
664
+ key = f"verrec/{a.get('project_id')}/{agent}"
665
+ if now - float(st.get(key, 0) or 0) < 1800:
666
+ continue # rate-limit: <=1 version-recycle per agent / 30min (no recycle-storm)
667
+ req = _rpc("mc_request_recycle",
668
+ {"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
669
+ if req and req.get("ok") and req.get("requested"):
670
+ _rpc("mc_record_recycle",
671
+ {"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
672
+ st[key] = now
673
+ n += 1
674
+ _log(f"VERSION-RECYCLE {proj}/{agent}: running {cv} < disk {disk} — recycle at idle to update")
675
+ if n:
676
+ _save_state(st)
677
+ return n
678
+
679
+
622
680
  def cmd_hostd(args: list) -> int:
623
681
  """Entry point for `meshcode hostd ...`."""
624
682
  if not args or args[0] in ("-h", "--help"):
@@ -661,8 +719,9 @@ def cmd_hostd(args: list) -> int:
661
719
  try:
662
720
  relaunched = _do_respawns(api_key, host_id)
663
721
  recycled = _do_recycles(api_key, host_id)
664
- if relaunched or recycled:
665
- _log(f"sweep done — {relaunched} respawned, {recycled} recycled")
722
+ ver_recycled = _do_version_recycles(api_key, host_id)
723
+ if relaunched or recycled or ver_recycled:
724
+ _log(f"sweep done — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled")
666
725
  except Exception as e:
667
726
  _log(f"WARN: sweep error: {e}")
668
727
  time.sleep(POLL_INTERVAL_SEC)
@@ -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.75
3
+ Version: 2.11.77
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.75"
7
+ version = "2.11.77"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}