meshcode 2.11.87__tar.gz → 2.11.88__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 (244) hide show
  1. {meshcode-2.11.87 → meshcode-2.11.88}/PKG-INFO +1 -1
  2. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/hostd.py +63 -0
  4. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode.egg-info/PKG-INFO +1 -1
  5. meshcode-2.11.88/meshcode.egg-info/SOURCES.txt +89 -0
  6. meshcode-2.11.88/meshcode.egg-info/top_level.txt +1 -0
  7. {meshcode-2.11.87 → meshcode-2.11.88}/pyproject.toml +1 -1
  8. meshcode-2.11.87/meshcode/ascii_art.py +0 -638
  9. meshcode-2.11.87/meshcode/cli.py +0 -42
  10. meshcode-2.11.87/meshcode/compat.py +0 -174
  11. meshcode-2.11.87/meshcode/error_hints.py +0 -74
  12. meshcode-2.11.87/meshcode/exceptions.py +0 -52
  13. meshcode-2.11.87/meshcode/invites.py +0 -406
  14. meshcode-2.11.87/meshcode/launcher.py +0 -353
  15. meshcode-2.11.87/meshcode/launcher_install.py +0 -414
  16. meshcode-2.11.87/meshcode/meshcode_mcp/__init__.py +0 -22
  17. meshcode-2.11.87/meshcode/meshcode_mcp/__main__.py +0 -62
  18. meshcode-2.11.87/meshcode/meshcode_mcp/test_backend.py +0 -86
  19. meshcode-2.11.87/meshcode/meshcode_mcp/test_realtime.py +0 -95
  20. meshcode-2.11.87/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  21. meshcode-2.11.87/meshcode/preferences.py +0 -260
  22. meshcode-2.11.87/meshcode/protocol_v2.py +0 -129
  23. meshcode-2.11.87/meshcode/secrets.py +0 -365
  24. meshcode-2.11.87/meshcode/supervisor.py +0 -186
  25. meshcode-2.11.87/meshcode/upload.py +0 -125
  26. meshcode-2.11.87/meshcode-backend-wt/comms_v4.py +0 -1941
  27. meshcode-2.11.87/meshcode-backend-wt/meshcode/__init__.py +0 -82
  28. meshcode-2.11.87/meshcode-backend-wt/meshcode/comms_v4.py +0 -3563
  29. meshcode-2.11.87/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -1261
  30. meshcode-2.11.87/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -460
  31. meshcode-2.11.87/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -4117
  32. meshcode-2.11.87/meshcode-backend-wt/meshcode/quickstart.py +0 -148
  33. meshcode-2.11.87/meshcode-backend-wt/meshcode/run_agent.py +0 -958
  34. meshcode-2.11.87/meshcode-backend-wt/meshcode/self_update.py +0 -345
  35. meshcode-2.11.87/meshcode-backend-wt/meshcode/setup_clients.py +0 -926
  36. meshcode-2.11.87/meshcode-backend-wt/scripts/sentinel.py +0 -257
  37. meshcode-2.11.87/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -387
  38. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -82
  39. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -638
  40. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -42
  41. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -3563
  42. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -174
  43. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -74
  44. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -52
  45. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -406
  46. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -353
  47. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -414
  48. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -22
  49. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -62
  50. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -1261
  51. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -460
  52. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -4117
  53. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -86
  54. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -95
  55. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  56. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -260
  57. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -129
  58. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -148
  59. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -958
  60. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -365
  61. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -345
  62. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -926
  63. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -186
  64. meshcode-2.11.87/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -125
  65. meshcode-2.11.87/meshcode-noun-wt/comms_v4.py +0 -1941
  66. meshcode-2.11.87/meshcode-noun-wt/meshcode/__init__.py +0 -82
  67. meshcode-2.11.87/meshcode-noun-wt/meshcode/ascii_art.py +0 -638
  68. meshcode-2.11.87/meshcode-noun-wt/meshcode/cli.py +0 -42
  69. meshcode-2.11.87/meshcode-noun-wt/meshcode/comms_v4.py +0 -3563
  70. meshcode-2.11.87/meshcode-noun-wt/meshcode/compat.py +0 -174
  71. meshcode-2.11.87/meshcode-noun-wt/meshcode/error_hints.py +0 -74
  72. meshcode-2.11.87/meshcode-noun-wt/meshcode/exceptions.py +0 -52
  73. meshcode-2.11.87/meshcode-noun-wt/meshcode/invites.py +0 -406
  74. meshcode-2.11.87/meshcode-noun-wt/meshcode/launcher.py +0 -353
  75. meshcode-2.11.87/meshcode-noun-wt/meshcode/launcher_install.py +0 -414
  76. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -22
  77. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -62
  78. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -1261
  79. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -460
  80. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -4117
  81. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -86
  82. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -95
  83. meshcode-2.11.87/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  84. meshcode-2.11.87/meshcode-noun-wt/meshcode/preferences.py +0 -260
  85. meshcode-2.11.87/meshcode-noun-wt/meshcode/protocol_v2.py +0 -129
  86. meshcode-2.11.87/meshcode-noun-wt/meshcode/quickstart.py +0 -148
  87. meshcode-2.11.87/meshcode-noun-wt/meshcode/run_agent.py +0 -958
  88. meshcode-2.11.87/meshcode-noun-wt/meshcode/secrets.py +0 -365
  89. meshcode-2.11.87/meshcode-noun-wt/meshcode/self_update.py +0 -345
  90. meshcode-2.11.87/meshcode-noun-wt/meshcode/setup_clients.py +0 -926
  91. meshcode-2.11.87/meshcode-noun-wt/meshcode/supervisor.py +0 -186
  92. meshcode-2.11.87/meshcode-noun-wt/meshcode/upload.py +0 -125
  93. meshcode-2.11.87/meshcode-noun-wt/scripts/sentinel.py +0 -257
  94. meshcode-2.11.87/meshcode-noun-wt/tests/test_core.py +0 -216
  95. meshcode-2.11.87/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -366
  96. meshcode-2.11.87/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -361
  97. meshcode-2.11.87/meshcode-noun-wt/tests/test_exceptions.py +0 -107
  98. meshcode-2.11.87/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -200
  99. meshcode-2.11.87/meshcode-noun-wt/tests/test_migration_integrity.py +0 -176
  100. meshcode-2.11.87/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -236
  101. meshcode-2.11.87/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -255
  102. meshcode-2.11.87/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -387
  103. meshcode-2.11.87/meshcode-noun-wt/tests/test_security_regressions.py +0 -171
  104. meshcode-2.11.87/meshcode-noun-wt/tests/test_sentinel.py +0 -148
  105. meshcode-2.11.87/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -231
  106. meshcode-2.11.87/meshcode-tasks-wt/comms_v4.py +0 -1941
  107. meshcode-2.11.87/meshcode-tasks-wt/meshcode/__init__.py +0 -82
  108. meshcode-2.11.87/meshcode-tasks-wt/meshcode/ascii_art.py +0 -638
  109. meshcode-2.11.87/meshcode-tasks-wt/meshcode/cli.py +0 -42
  110. meshcode-2.11.87/meshcode-tasks-wt/meshcode/comms_v4.py +0 -3563
  111. meshcode-2.11.87/meshcode-tasks-wt/meshcode/compat.py +0 -174
  112. meshcode-2.11.87/meshcode-tasks-wt/meshcode/error_hints.py +0 -74
  113. meshcode-2.11.87/meshcode-tasks-wt/meshcode/exceptions.py +0 -52
  114. meshcode-2.11.87/meshcode-tasks-wt/meshcode/invites.py +0 -406
  115. meshcode-2.11.87/meshcode-tasks-wt/meshcode/launcher.py +0 -353
  116. meshcode-2.11.87/meshcode-tasks-wt/meshcode/launcher_install.py +0 -414
  117. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -22
  118. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -62
  119. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -1261
  120. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -460
  121. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -4117
  122. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -86
  123. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -95
  124. meshcode-2.11.87/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  125. meshcode-2.11.87/meshcode-tasks-wt/meshcode/preferences.py +0 -260
  126. meshcode-2.11.87/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -129
  127. meshcode-2.11.87/meshcode-tasks-wt/meshcode/quickstart.py +0 -148
  128. meshcode-2.11.87/meshcode-tasks-wt/meshcode/run_agent.py +0 -958
  129. meshcode-2.11.87/meshcode-tasks-wt/meshcode/secrets.py +0 -365
  130. meshcode-2.11.87/meshcode-tasks-wt/meshcode/self_update.py +0 -345
  131. meshcode-2.11.87/meshcode-tasks-wt/meshcode/setup_clients.py +0 -926
  132. meshcode-2.11.87/meshcode-tasks-wt/meshcode/supervisor.py +0 -186
  133. meshcode-2.11.87/meshcode-tasks-wt/meshcode/upload.py +0 -125
  134. meshcode-2.11.87/meshcode-tasks-wt/scripts/sentinel.py +0 -257
  135. meshcode-2.11.87/meshcode-tasks-wt/tests/test_core.py +0 -216
  136. meshcode-2.11.87/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -366
  137. meshcode-2.11.87/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -361
  138. meshcode-2.11.87/meshcode-tasks-wt/tests/test_exceptions.py +0 -107
  139. meshcode-2.11.87/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -200
  140. meshcode-2.11.87/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -176
  141. meshcode-2.11.87/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -236
  142. meshcode-2.11.87/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -255
  143. meshcode-2.11.87/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -387
  144. meshcode-2.11.87/meshcode-tasks-wt/tests/test_security_regressions.py +0 -171
  145. meshcode-2.11.87/meshcode-tasks-wt/tests/test_sentinel.py +0 -148
  146. meshcode-2.11.87/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -231
  147. meshcode-2.11.87/meshcode.egg-info/SOURCES.txt +0 -240
  148. meshcode-2.11.87/meshcode.egg-info/top_level.txt +0 -4
  149. meshcode-2.11.87/tests/test_autonomous_prompt_inject 2.py +0 -126
  150. meshcode-2.11.87/tests/test_core.py +0 -216
  151. meshcode-2.11.87/tests/test_cross_agent_messaging.py +0 -366
  152. meshcode-2.11.87/tests/test_esc_deaf_state.py +0 -361
  153. meshcode-2.11.87/tests/test_exceptions.py +0 -107
  154. meshcode-2.11.87/tests/test_mark_read_batch.py +0 -200
  155. meshcode-2.11.87/tests/test_migration_integrity.py +0 -176
  156. meshcode-2.11.87/tests/test_realtime_event_freshness.py +0 -236
  157. meshcode-2.11.87/tests/test_rls_cross_tenant.py +0 -255
  158. meshcode-2.11.87/tests/test_security_regressions.py +0 -171
  159. meshcode-2.11.87/tests/test_sentinel.py +0 -148
  160. meshcode-2.11.87/tests/test_status_enum_coverage.py +0 -231
  161. {meshcode-2.11.87 → meshcode-2.11.88}/README.md +0 -0
  162. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/__main__.py +0 -0
  163. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/_session_handoff_template.py +0 -0
  164. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/_stop_hook_template.py +0 -0
  165. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/ascii_art.py +0 -0
  166. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/atomic_push.py +0 -0
  167. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/claude_update.py +0 -0
  168. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/cli.py +0 -0
  169. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/comms_v4.py +0 -0
  170. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/compat.py +0 -0
  171. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/daemon.py +0 -0
  172. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/date_parse.py +0 -0
  173. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/doctor.py +0 -0
  174. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/error_hints.py +0 -0
  175. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/exceptions.py +0 -0
  176. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/invites.py +0 -0
  177. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/launcher.py +0 -0
  178. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/launcher_install.py +0 -0
  179. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/meshcode_mcp/__init__.py +0 -0
  180. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/meshcode_mcp/__main__.py +0 -0
  181. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/backend.py +0 -0
  182. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/realtime.py +0 -0
  183. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/server.py +0 -0
  184. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  185. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/meshcode_mcp/test_backend.py +0 -0
  186. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  187. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  188. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  189. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  190. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  191. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/preferences.py +0 -0
  192. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/protocol_handler.py +0 -0
  193. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/protocol_v2.py +0 -0
  194. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/quickstart.py +0 -0
  195. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/rpc_allowlist.py +0 -0
  196. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/run_agent.py +0 -0
  197. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/scripts/check_secrets.py +0 -0
  198. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/scripts/race_rate_harness.py +0 -0
  199. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/secrets.py +0 -0
  200. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/self_update.py +0 -0
  201. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/setup_clients.py +0 -0
  202. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/supervisor.py +0 -0
  203. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode/up.py +0 -0
  204. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/meshcode/upload.py +0 -0
  205. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode.egg-info/dependency_links.txt +0 -0
  206. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode.egg-info/entry_points.txt +0 -0
  207. {meshcode-2.11.87 → meshcode-2.11.88}/meshcode.egg-info/requires.txt +0 -0
  208. {meshcode-2.11.87 → meshcode-2.11.88}/setup.cfg +0 -0
  209. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_auto_update_hardening.py +0 -0
  210. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_autonomous_closegap_1.py +0 -0
  211. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_autonomous_closegap_2.py +0 -0
  212. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_autonomous_closegap_3.py +0 -0
  213. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_autonomous_prompt_inject.py +0 -0
  214. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_boot_bug_regression.py +0 -0
  215. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_color_truecolor.py +0 -0
  216. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_core.py +0 -0
  217. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_cross_agent_messaging.py +0 -0
  218. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_date_parse.py +0 -0
  219. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_doctor.py +0 -0
  220. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_epistemic_v1_python_sdk.py +0 -0
  221. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  222. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_esc_deaf_state.py +0 -0
  223. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_exceptions.py +0 -0
  224. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_file_upload.py +0 -0
  225. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_init_device_code.py +0 -0
  226. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_install_guard.py +0 -0
  227. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_lease_sigterm_release.py +0 -0
  228. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_mark_read_batch.py +0 -0
  229. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_marketplace_ratings.py +0 -0
  230. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_migration_integrity.py +0 -0
  231. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_realtime_event_freshness.py +0 -0
  232. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_rls_cross_tenant.py +0 -0
  233. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_rpc_grants.py +0 -0
  234. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_rpc_migrations.py +0 -0
  235. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_run_agent_dry_run.py +0 -0
  236. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_run_agent_no_server_import.py +0 -0
  237. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_security_regressions.py +0 -0
  238. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_self_update_user_site.py +0 -0
  239. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_sentinel.py +0 -0
  240. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_setup_path.py +0 -0
  241. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_sleep_signals.py +0 -0
  242. {meshcode-2.11.87/meshcode-backend-wt → meshcode-2.11.88}/tests/test_status_enum_coverage.py +0 -0
  243. {meshcode-2.11.87 → meshcode-2.11.88}/tests/test_stay_on_loop_hook.py +0 -0
  244. {meshcode-2.11.87 → meshcode-2.11.88}/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.87
3
+ Version: 2.11.88
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.87"
2
+ __version__ = "2.11.88"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -45,6 +45,65 @@ import uuid
45
45
  from pathlib import Path
46
46
  from typing import Optional
47
47
 
48
+ # COMMANDER-LIFECYCLE-ALWAYS-WORKS (task ca947d7f): the version of the code THIS hostd
49
+ # process is executing, captured at import. A long-running hostd keeps this in memory, so a
50
+ # bg pip update (new SDK) does NOT land daemon-side fixes (e.g. the Stop kill sweep _do_stops,
51
+ # task 35bee961) until the PROCESS restarts — which is why Samuel's qa sat 'stopping' for ~1h.
52
+ # We compare this against the on-disk installed version each sweep and self-reexec on drift.
53
+ try:
54
+ from meshcode import __version__ as _RUNNING_VERSION
55
+ except Exception:
56
+ _RUNNING_VERSION = "0.0.0"
57
+ _LAST_UPDATE_KICK_MONO = 0.0
58
+
59
+
60
+ def _maybe_self_restart_on_version_drift() -> None:
61
+ """Keep a running hostd CURRENT so Stop/launch always work (task ca947d7f).
62
+
63
+ (a) periodically kicks the detached, TTL-guarded bg updater so even a host with no
64
+ agent launches still pulls new wheels onto disk;
65
+ (b) when the ON-DISK installed version is newer than the code we're running, os.execv-
66
+ restarts at this safe sweep boundary (no spawn in flight; hostd_state.json incl.
67
+ headless_pids is persisted and survives the re-exec, so in-flight stop targets aren't
68
+ lost). After re-exec, running == on-disk -> no re-exec loop.
69
+ Opt out with MESHCODE_HOSTD_NO_AUTORESTART=1.
70
+ """
71
+ global _LAST_UPDATE_KICK_MONO
72
+ if os.environ.get("MESHCODE_HOSTD_NO_AUTORESTART", "").lower() in ("1", "true", "yes"):
73
+ return
74
+ now = time.monotonic()
75
+ if now - _LAST_UPDATE_KICK_MONO >= 1800: # at most every 30min
76
+ _LAST_UPDATE_KICK_MONO = now
77
+ try:
78
+ from meshcode import self_update as _su
79
+ _su.check_and_maybe_update() # non-blocking, detached, TTL-guarded internally
80
+ except Exception:
81
+ pass
82
+ try:
83
+ import importlib.metadata as _ilmd
84
+ ondisk = _ilmd.version("meshcode") # reads dist-info METADATA on disk (pip-updated)
85
+ except Exception:
86
+ return
87
+ try:
88
+ from meshcode import self_update as _su
89
+ newer = _su._is_newer(ondisk, _RUNNING_VERSION)
90
+ except Exception:
91
+ def _vt(v):
92
+ return tuple(int(x) for x in v.split(".") if x.isdigit())
93
+ try:
94
+ newer = _vt(ondisk) > _vt(_RUNNING_VERSION)
95
+ except Exception:
96
+ newer = False
97
+ if not newer:
98
+ return
99
+ _log(f"VERSION DRIFT: running {_RUNNING_VERSION}, on-disk {ondisk} -> self-reexec to load "
100
+ f"new code (Stop kill sweep + daemon fixes). headless_pids persisted; KeepAlive re-attaches.")
101
+ try:
102
+ os.execv(sys.executable, [sys.executable, "-m", "meshcode"] + sys.argv[1:])
103
+ except Exception as e:
104
+ _log(f"WARN: self-reexec failed ({e}); exiting so the supervisor restarts us")
105
+ os._exit(0)
106
+
48
107
  STATE_DIR = Path.home() / ".meshcode"
49
108
  HOST_ID_PATH = STATE_DIR / "host_id"
50
109
  LOG_PATH = STATE_DIR / "hostd.log"
@@ -980,6 +1039,10 @@ def cmd_hostd(args: list) -> int:
980
1039
  _rpc("mc_host_heartbeat", {"p_api_key": api_key, "p_host_id": host_id})
981
1040
  except Exception:
982
1041
  pass
1042
+ # ca947d7f: keep this daemon CURRENT — if a newer SDK is on disk,
1043
+ # re-exec NOW (before doing work) so Stop's kill sweep + launch fixes
1044
+ # always run on a stale-running host without manual intervention.
1045
+ _maybe_self_restart_on_version_drift()
983
1046
  relaunched = _do_respawns(api_key, host_id)
984
1047
  recycled = _do_recycles(api_key, host_id)
985
1048
  ver_recycled = _do_version_recycles(api_key, host_id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.87
3
+ Version: 2.11.88
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -0,0 +1,89 @@
1
+ README.md
2
+ pyproject.toml
3
+ meshcode/__init__.py
4
+ meshcode/__main__.py
5
+ meshcode/_session_handoff_template.py
6
+ meshcode/_stop_hook_template.py
7
+ meshcode/ascii_art.py
8
+ meshcode/atomic_push.py
9
+ meshcode/claude_update.py
10
+ meshcode/cli.py
11
+ meshcode/comms_v4.py
12
+ meshcode/compat.py
13
+ meshcode/daemon.py
14
+ meshcode/date_parse.py
15
+ meshcode/doctor.py
16
+ meshcode/error_hints.py
17
+ meshcode/exceptions.py
18
+ meshcode/hostd.py
19
+ meshcode/invites.py
20
+ meshcode/launcher.py
21
+ meshcode/launcher_install.py
22
+ meshcode/preferences.py
23
+ meshcode/protocol_handler.py
24
+ meshcode/protocol_v2.py
25
+ meshcode/quickstart.py
26
+ meshcode/rpc_allowlist.py
27
+ meshcode/run_agent.py
28
+ meshcode/secrets.py
29
+ meshcode/self_update.py
30
+ meshcode/setup_clients.py
31
+ meshcode/supervisor.py
32
+ meshcode/up.py
33
+ meshcode/upload.py
34
+ meshcode.egg-info/PKG-INFO
35
+ meshcode.egg-info/SOURCES.txt
36
+ meshcode.egg-info/dependency_links.txt
37
+ meshcode.egg-info/entry_points.txt
38
+ meshcode.egg-info/requires.txt
39
+ meshcode.egg-info/top_level.txt
40
+ meshcode/meshcode_mcp/__init__.py
41
+ meshcode/meshcode_mcp/__main__.py
42
+ meshcode/meshcode_mcp/backend.py
43
+ meshcode/meshcode_mcp/realtime.py
44
+ meshcode/meshcode_mcp/server.py
45
+ meshcode/meshcode_mcp/sleep_signals.py
46
+ meshcode/meshcode_mcp/test_backend.py
47
+ meshcode/meshcode_mcp/test_boot_timing.py
48
+ meshcode/meshcode_mcp/test_install_guard.py
49
+ meshcode/meshcode_mcp/test_prefs_claude_version.py
50
+ meshcode/meshcode_mcp/test_realtime.py
51
+ meshcode/meshcode_mcp/test_server_wrapper.py
52
+ meshcode/scripts/check_secrets.py
53
+ meshcode/scripts/race_rate_harness.py
54
+ tests/test_auto_update_hardening.py
55
+ tests/test_autonomous_closegap_1.py
56
+ tests/test_autonomous_closegap_2.py
57
+ tests/test_autonomous_closegap_3.py
58
+ tests/test_autonomous_prompt_inject.py
59
+ tests/test_boot_bug_regression.py
60
+ tests/test_color_truecolor.py
61
+ tests/test_core.py
62
+ tests/test_cross_agent_messaging.py
63
+ tests/test_date_parse.py
64
+ tests/test_doctor.py
65
+ tests/test_epistemic_v1_python_sdk.py
66
+ tests/test_epistemic_v1_stop_conditions.py
67
+ tests/test_esc_deaf_state.py
68
+ tests/test_exceptions.py
69
+ tests/test_file_upload.py
70
+ tests/test_init_device_code.py
71
+ tests/test_install_guard.py
72
+ tests/test_lease_sigterm_release.py
73
+ tests/test_mark_read_batch.py
74
+ tests/test_marketplace_ratings.py
75
+ tests/test_migration_integrity.py
76
+ tests/test_realtime_event_freshness.py
77
+ tests/test_rls_cross_tenant.py
78
+ tests/test_rpc_grants.py
79
+ tests/test_rpc_migrations.py
80
+ tests/test_run_agent_dry_run.py
81
+ tests/test_run_agent_no_server_import.py
82
+ tests/test_security_regressions.py
83
+ tests/test_self_update_user_site.py
84
+ tests/test_sentinel.py
85
+ tests/test_setup_path.py
86
+ tests/test_sleep_signals.py
87
+ tests/test_status_enum_coverage.py
88
+ tests/test_stay_on_loop_hook.py
89
+ tests/test_wait_open_tasks_contradiction.py
@@ -0,0 +1 @@
1
+ meshcode
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meshcode"
7
- version = "2.11.87"
7
+ version = "2.11.88"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}